gpt4 book ai didi

.net - 当 .NET 4.5 中任务异步中的任何方法永远不会完成时

转载 作者:行者123 更新时间:2023-12-02 15:10:42 27 4
gpt4 key购买 nike

我正在尝试新的 asyncawait使用 VS2012RC 和 .NET 4.5 的关键字,只需一个返回字符串的简单委托(delegate),当我运行单个委托(delegate)时,它工作得很好:

string message = await Task.Run(() => { return "something"; });

但是当我尝试WhenAny时:

string message = await Task.WhenAny(new Task<string>(() => { return "something"; })).Result;

它永远不会完成......为什么?

我一直在观看 Steve Sanderson 在 2012 年荷兰 TechDays 上的视频,这使得这看起来非常简单:http://channel9.msdn.com/Events/TechDays/Techdays-2012-the-Netherlands/2287

最佳答案

当您使用其构造函数创建Task时,它尚未启动。您必须调用 Start() 才能实际启动它。

我认为您也应该在第二个版本中使用 Task.Run() ,它会返回一个已经启动的 Task

此外,将异步等待 (await) 与同步等待(ResultWait())混合使用也是一个坏主意,因为 it can lead to a deadlock .

所以,我会把你的代码写成:

var task = await Task.WhenAny(Task.Run(() => "something"));
string message = await task;

(当然,当您只有一个 Task 时,没有理由使用 Task.WhenAny(),但我假设这只是一个示例。 )

关于.net - 当 .NET 4.5 中任务异步中的任何方法永远不会完成时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11492943/

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