gpt4 book ai didi

c# - Task.RunSynchronously() 工作 "recursively"吗?

转载 作者:行者123 更新时间:2023-12-02 17:44:59 26 4
gpt4 key购买 nike

如果我在 C# 中的 Task 上调用 RunSynchronously(),这是否会导致异步调用更深入地同步运行?

假设我有一个名为 UpdateAsync() 的方法。在此方法中,对 DoSomethingAsync() 进行了另一个异步调用,在此我们再次找到 DoSomethingElseAsync(),将调用 RunSynchronously() on ' UpdateAsync()' 导致 RunSynchronously() 也在 DoSomethingAsync() 上间接调用?

我的问题的原因:我有一种情况,我“需要”在 catch block 中调用异步方法 (UpdateAsync()),并想知道是否使用 RunSynchronously() 调用它 是安全的。文档非常清楚您不能在 catch block 内 await 。 (严格来说,我可以在 catch block 中使用一个 bool 值,并在 try-catch 之后调用 UpdateAsync(),但这感觉很脏)。很抱歉这个双重问题,但正如你可能理解的那样,我不太清楚如何表达它,也不太了解这个领域。

(编辑:我不知道如何找出一个方法是否被异步调用。您将如何为此编写单元测试?是否可以以某种方式记录它?)

最佳答案

I "need" to call an asynchronous method and wonder if calling this with RunSynchronously() is safe

Task 有两种类型:基于代码的* Tasks(您可以使用 Task 构造函数或 Task.Factory.StartNew()) 和 promise 风格的 Task(您可以使用 TaskCompletionSource 或编写 async 手动创建它们 方法)。

并且您可以通过调用 Start()RunSynchronously() 启动的唯一 Task未启动的基于代码的任务。由于异步方法返回 promise 风格的 Task(或可能已经启动的基于代码的 Task),因此调用 RunSynchronously() 不是有效并将导致异常。

因此,要真正回答您的问题:您所问的是不可能的,所以问它是否安全是没有意义的。


* 这不是官方名称,不知道有没有。

关于c# - Task.RunSynchronously() 工作 "recursively"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16054467/

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