gpt4 book ai didi

asynchronous - 异步/等待 : If it doen't use threads what is it doing to running processing at the same time?

转载 作者:行者123 更新时间:2023-12-04 07:02:56 24 4
gpt4 key购买 nike

我正在做一些研究以更好地理解 C# 的异步/等待。

我发现一个网站有以下代码来显示同步处理与 async/await 相比慢了多少:

 public IActionResult Index()
{
Stopwatch watch = new Stopwatch();
watch.Start();

ContentManagement service = new ContentManagement();
var content = service.GetContent();
var count = service.GetCount();
var name = service.GetName();

watch.Stop();
ViewBag.WatchMilliseconds = watch.ElapsedMilliseconds;

return View();
}

[HttpGet]
public async Task<ActionResult> IndexAsync()
{
Stopwatch watch = new Stopwatch();
watch.Start();

ContentManagement service = new ContentManagement();
var contentTask = service.GetContentAsync();
var countTask = service.GetCountAsync();
var nameTask = service.GetNameAsync();

var content = await contentTask;
var count = await countTask;
var name = await nameTask;

watch.Stop();
ViewBag.WatchMilliseconds = watch.ElapsedMilliseconds;
return View("Index");
}


public class ContentManagement
{
public string GetContent()
{
Thread.Sleep(2000);
return "content";
}

public int GetCount()
{
Thread.Sleep(5000);
return 4;
}

public string GetName()
{
Thread.Sleep(3000);
return "Matthew";
}
public async Task<string> GetContentAsync()
{
await Task.Delay(2000);
return "content";
}

public async Task<int> GetCountAsync()
{
await Task.Delay(5000);
return 4;
}

public async Task<string> GetNameAsync()
{
await Task.Delay(3000);
return "Matthew";
}
}

我在较高层次上理解了上面的代码以及为什么它执行得更快。

我不明白的是,如果没有使用线程,处理是如何同时运行的?

我在几个地方读到 async/await 不会创建新线程来进行处理。那么,async/await 做了什么来允许处理同时发生呢?三个 await Task.Delay 并行运行,对吗?如果它没有创建 3 个线程,它在做什么?

我只想了解高层发生的事情。

让我知道。

提前致谢。

最佳答案

if threads are not being used, how is the processing running at the same time?

线程可让您在同一系统上并行计算。当涉及通信或其他 I/O 时,您的代码将与一个不同的系统进行通信。当您启动任务时,另一个系统开始工作。这与您的系统并行发生,在您 await 任务之前,系统可以自由地做任何它需要做的事情。

The three await Task.Delay are running in parallel, correct?

它们不完全是运行,它们是并行的休眠。 sleep 占用的资源很少。这就是为什么它们看起来是并行“运行”的原因。

关于asynchronous - 异步/等待 : If it doen't use threads what is it doing to running processing at the same time?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44349540/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com