C# 调用相互依赖的多个异步方法

C# 调用相互依赖的多个异步方法,c#,asynchronous,asp.net-core,async-await,C#,Asynchronous,Asp.net Core,Async Await,我正在寻找调用多个异步方法的最佳实践,其中下一个方法依赖于前一个方法返回的值 我正在试验两种方法 一, 二, 我只是想了解最好的方法,因为我是异步编程的新手 提前谢谢 约翰尼 我正在寻找调用多个异步方法的最佳实践,其中下一个方法依赖于前一个方法返回的值 许多异步问题可以通过查看同步等价物来回答。如果所有的方法都是同步的,并且每个方法都依赖于以前方法的结果,那会是什么样子 var T1 = Sum(2,5); var T2 = Sum(T1, 7); var T3 = Sum(T2, 7);

我正在寻找调用多个异步方法的最佳实践,其中下一个方法依赖于前一个方法返回的值

我正在试验两种方法

一,

二,

我只是想了解最好的方法,因为我是异步编程的新手

提前谢谢

约翰尼

我正在寻找调用多个异步方法的最佳实践,其中下一个方法依赖于前一个方法返回的值

许多异步问题可以通过查看同步等价物来回答。如果所有的方法都是同步的,并且每个方法都依赖于以前方法的结果,那会是什么样子

var T1 = Sum(2,5);
var T2 = Sum(T1, 7);
var T3 = Sum(T2, 7);
那么异步等价物将是:

var T1 = await SumAsync(2,5);
var T2 = await SumAsync(T1, 7);
var T3 = await SumAsync(T2, 7);
注意:为了将来的参考,不要插入StartNew或Task。作为异步代码的通用占位符运行;他们只是混淆了问题,因为他们有非常具体的用例。使用等待任务。改为延迟;这是线程。异步世界的睡眠

我正在寻找调用多个异步方法的最佳实践,其中下一个方法依赖于前一个方法返回的值

许多异步问题可以通过查看同步等价物来回答。如果所有的方法都是同步的,并且每个方法都依赖于以前方法的结果,那会是什么样子

var T1 = Sum(2,5);
var T2 = Sum(T1, 7);
var T3 = Sum(T2, 7);
那么异步等价物将是:

var T1 = await SumAsync(2,5);
var T2 = await SumAsync(T1, 7);
var T3 = await SumAsync(T2, 7);

注意:为了将来的参考,不要插入StartNew或Task。作为异步代码的通用占位符运行;他们只是混淆了问题,因为他们有非常具体的用例。使用等待任务。改为延迟;这是线程。异步世界的睡眠。

无。。。首先,您使用的是StartNew,您可能应该使用new Task.Run。其次,您是在异步方法中包装任务,不要使用task.Run方法的实现;相反,请使用Task.Run调用该方法,第三,您的任何方法都没有使用Async作为后缀,最后,您在异步方法上调用Result,并且在某些情况下会出现死锁,您不应该真正需要这样做..尝试理解为什么在需要连续执行点的情况下使用Async。实际上,我的3个异步方法在2个不同的数据库中执行一些Db操作,并且下一个方法依赖于前一个方法的值。。。在发布这个问题之后,我做了更多的研究,现在我明白了在异步方法上调用结果是如何导致死锁的。。。我该怎么做有什么建议吗@MichaelRandall非常感谢您的时间@乔纳塔尼奥:谢谢你抽出时间。请看我上面的评论。^这是最可读和简洁的,依我看,这是最好的方式。。。首先,您使用的是StartNew,您可能应该使用new Task.Run。其次,您是在异步方法中包装任务,不要使用task.Run方法的实现;相反,请使用Task.Run调用该方法,第三,您的任何方法都没有使用Async作为后缀,最后,您在异步方法上调用Result,并且在某些情况下会出现死锁,您不应该真正需要这样做..尝试理解为什么在需要连续执行点的情况下使用Async。实际上,我的3个异步方法在2个不同的数据库中执行一些Db操作,并且下一个方法依赖于前一个方法的值。。。在发布这个问题之后,我做了更多的研究,现在我明白了在异步方法上调用结果是如何导致死锁的。。。我该怎么做有什么建议吗@MichaelRandall非常感谢您的时间@乔纳塔尼奥:谢谢你抽出时间。请看我上面的评论。^这是最可读和简洁的,依我看,这是我阅读你的文章的最好方式,不要阻止异步代码,同时在这里得到你的回复有点滑稽哈哈。非常感谢您的解释-我不知道该任务。可以等待延迟。此外,在这里的这些评论证实了方法1是一条可行之路之后,我感觉好多了。我正在读你的文章《不要在异步代码上阻塞》,同时得到你的回复也很有趣,哈哈。非常感谢您的解释-我不知道该任务。可以等待延迟。此外,在这里的这些评论证实了方法1是一条可行之路之后,我感觉好多了。将此标记为答案。