或者我必须使用Task.在方法中运行以确保每个函数都存在于自己的线程上?我试着看看在我正在研究的代码中,这种做法是否有智慧
public async Task<string> GetAStringAfterSyncProcessing(string processThis) {
return await Task.Run(async () => {
var processThis2 = processThis + ",";
var processThis3 = processThis2 + ",";
var nowImDone = processThis3 + ",";
return nowImDone;
});
}
我有一种感觉,这是一种无意的设计,因为它使调试时不可能遍历每一行。因此,我想知道我是否正确地向其他人解释了async自动意味着创建一个新线程,以便只有在使用wait或.GetAwaiter().GetResult()时才调用该函数。感谢
否,async
本身不会创建新线程。
在您演示的代码中使用async
/await
是没有意义的。它主要相当于:
public Task<string> GetAStringAfterSyncProcessing(string processThis) {
return Task.Run(() => {
var processThis2 = processThis + ",";
var processThis3 = processThis2 + ",";
var nowImDone = processThis3 + ",";
return nowImDone;
});
}
(我也删除了异步lambda,这是不必要的。)
下一篇:
因此,我想知道我是否正确地向其他人解释了async自动意味着创建一个新线程,以便只有在等待或使用.GetAwaiter().GetResult()时才调用该函数。
不,这绝对不是正确的解释。很难在一个SO的答案中给出完整的答案,但我强烈建议您去阅读MSDN资源,了解async/await的实际内容。有一种期望是,无论您等待什么,都将是本质上异步的——这是因为它本身启动了一个线程,或者因为它不需要一个线程才能异步(例如异步IO)。