繁体   English   中英

锁定行为 Task.WaitAny 与 Task.Result

[英]Locking Behavior Task.WaitAny vs. Task.Result

给定场景:

我正在努力解决一些锁定问题。 下面是一个简化的代码,它描述了给定代码中的情况。 我需要在非异步方法中使用异步方法,该方法应返回GetContentFromDbAsync()方法的结果字符串

给定任务:

myTask = Task.Run(async () => await GetContentFromDbAsync(key));

现在我的问题是在进行这些变化时锁定行为有什么不同吗? Task.Result 是否锁定线程对于选项 2 也是如此?

选项1:

string result = myTask.ConfigureAwait(false)).Result;

在 MSDN 中,我可以阅读:

访问属性的 get 访问器会阻塞调用线程,直到异步操作完成; 相当于调用了Wait方法。

选项 2:

string result ;
myTask.ContinueWith( (t) => { result = t; },TaskContinuationOptions.OnlyOnRanToCompletion);
Task.WaitAny(myTask)

对于 Task.WaitAny 没有在 MSDN 中写出这样的提示,他们只是错过了它还是它有另一个锁定行为,为什么?

Task.WaitAny有更好的锁定行为。 僵局?

Task.WaitAny也是阻塞的。 请注意,MSDN 上对Result评论指出“它等效于调用 Wait 方法”。 因此,调用ResultWaitWaitAny或任何其他形式的等待都会阻塞当前线程,直到异步方法完成执行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM