gpt4 book ai didi

multithreading - 4.5中的async是否意味着仅通过输入功能就可以产生新线程?

转载 作者:行者123 更新时间:2023-12-03 13:20:26 24 4
gpt4 key购买 nike

还是我必须在方法中使用Task.Run来确保每个函数都存在于其自己的线程中?我正在尝试在我正在研究的代码中看到这种做法是否有任何智慧。

public async Task<string> GetAStringAfterSyncProcessing(string processThis) {
return await Task.Run(async () => {
var processThis2 = processThis + ",";
var processThis3 = processThis2 + ",";
var nowImDone = processThis3 + ",";
return nowImDone;
});
}

我感觉这是非预期的设计,因为它使得调试时无法遍历每一行。因此,我想知道我是否应该向其他人解释异步将自动隐含创建一个新线程,以便仅在使用await或.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,这是不必要的。)

下一个:

So I'm wondering if I'd be right in explaining to others that async automatically implies the creating of a new thread so that the function is only called when await or .GetAwaiter().GetResult() is used.



不,这绝对不是正确的解释。仅凭一个SO答案就很难给出完整的说明,但是我强烈建议您去阅读 MSDN resources,它实际上是关于async/await的内容。期望您等待的一切都是固有异步的-这是因为它本身会启动线程,或者因为它不需要线程即可异步(例如,异步IO)。

关于multithreading - 4.5中的async是否意味着仅通过输入功能就可以产生新线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18386635/

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