【发布时间】:2019-12-12 17:27:02
【问题描述】:
让我们考虑一下这段代码:
var tasks = actionItems.Select(t => DoSmthAsync());
var resultAll = await Task.WhenAll(tasks);
和方法:
public async Task<int> DoSmthAsync()
{
Debug.WriteLine("Threadid=" + Thread.CurrentThread.ManagedThreadId);
var result = await DoSmthAnotherAsync();
Debug.WriteLine("ThreadId=" + Thread.CurrentThread.ManagedThreadId);
return result;
}
我希望这将在不同的线程中并行执行,但我看到它在同一个线程中工作。另外,我不明白任务何时运行?
【问题讨论】:
-
嗨,异步并不意味着并行,所以期望使用不同的线程是不正确的。见stackoverflow.com/questions/14099520/…
-
你能把
DoSmthAnotherAsync的代码贴出来吗? -
这是什么应用程序?控制台应用程序? Windows 窗体?
-
更大的问题是你为什么关心使用异步的线程?异步减少线程使用。
标签: c# linq asynchronous parallel-processing async-await