- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果我在 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/
我为我的应用程序进行单元测试而创建的 c# 类出现问题,特别是问题与 System.Threading.Tasks.Task 对象有关。 我有一个此类对象的列表,我想在它们上同步执行每个对象。 我调用
从 documentation 看来, Async.RunSynchronously 运行异步计算并等待其结果。我还读到它类似于 C# 中的 await。我很好奇这是否会阻塞线程直到它运行完成? 最佳
我只是想知道这个方法有什么用?在什么样的场景下我可以使用这个方法。 我最初的想法是 RunSynchronously 用于调用异步方法并同步运行该方法,而不会像 .wait() 那样导致死锁问题。 然
当使用超时和 CancellationToken 调用 Async.RunSynchronously 时,超时值似乎被忽略。我可以通过在 CancellationToken 上调用 CancelAft
如果我有这样的代码: let asyncReadToEnd (stream:Stream) = async { // Allocate 4kb buffer for downloading dat
在我的 f# 项目中,我正在调用一个 c# 库,该库返回一个任务。当我尝试在我的 f# 项目中执行此操作时,没有任何反应。 let str = getName() |> Async.AwaitTask
正如我有限(甚至错误)的理解,Async.StartImmediate 和 Async.RunSynchronously 在当前线程上启动异步计算。那么这两个功能究竟有什么区别呢?谁能帮忙解释一下?
如果我在 C# 中的 Task 上调用 RunSynchronously(),这是否会导致异步调用更深入地同步运行? 假设我有一个名为 UpdateAsync() 的方法。在此方法中,对 DoSome
如果我在 C# 中的 Task 上调用 RunSynchronously(),这是否会导致异步调用更深入地同步运行? 假设我有一个名为 UpdateAsync() 的方法。在此方法中,对 DoSome
我正在尝试同步运行异步任务,并且想知道 .RunSynchronously() 之间有什么区别和GetAwaiter().GetResult()是。 我见过很多 .Wait() 之间的比较以及这两种方
我手动构建一个任务: var task = new Task(() => Debug.WriteLine("Task")); 然后手动启动它: task.Start(TaskScheduler
假设我有一个 F# 计算要在 C# 中处理,我想让它们同步运行。引擎盖下的区别是什么: public static T RunSync(FSharpAsync computation)
调用 _thread.Join() 会导致 GetConsumingEnumerable 循环卡在最后一个元素上。为什么会出现这种行为? public abstract class ActorBa
他们好像和我一样,这两行代码有区别吗? new Task(myMethod).RunSynchronously(); // and Task.Run(() => myMethod()); 最佳答案 如
我是一名优秀的程序员,十分优秀!