Ric*_*ard 2 asynchronous async-await
我正在做一些研究,以更好地理解C#的异步/等待。
我发现一个网站,其中包含以下代码,以显示同步处理与异步/等待相比要慢多少:
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";
}
}
Run Code Online (Sandbox Code Playgroud)
我从较高的角度理解了上面的代码,以及为什么执行得更快。
我不明白的是,如果不使用线程,进程如何同时运行?
我在几个地方读过async / await不会创建新线程来进行处理。那么,异步/等待做什么以允许处理同时发生?三个等待的Task.Delay正在并行运行,对吗?如果未创建3个线程,它在做什么?
我只想了解高水平的情况。
让我知道。
提前致谢。
如果未使用线程,该处理如何同时运行?
线程使您可以并行化同一系统上的计算。当涉及通信或其他I / O时,您的代码将与另一个系统进行通信。启动任务时,另一个系统开始工作。这与您的系统并行发生,在您await执行任务之前,它可以自由执行其需要做的其他任何事情。
这三个
await Task.Delay是并行运行的,对吗?
它们运行不完全,正在并行睡眠。睡觉需要很少的资源。这就是为什么它们似乎并行运行。
| 归档时间: |
|
| 查看次数: |
457 次 |
| 最近记录: |