在事件处理程序中处理异步操作的正确模式是什么?

时间:2020-10-24 23:32:45

标签: .net task

我对异步编程的全部“全程下降”哲学完全失望。但是,.Net中有很多地方,您根本无法控制调用签名。事件处理程序浮现在脑海。事件处理程序没有返回类型(毕竟是事件):

public event EventHandler ThresholdReached;

protected virtual void OnThresholdReached(EventArgs e)
{
    Task.Run(async () => await Task.Delay(0).ConfigureAwait(false));
}

如果使用此模式,则分析器会标记为应通过使用await观察等待状态。这不是处理程序中的选项。所以我尝试了这种模式:

protected virtual void OnThresholdReached(EventArgs e)
{
    Task.Run(async () => await Task.Delay(0).ConfigureAwait(false)).Wait();
}

有人告诉我,等待同步任务会导致死锁。有人建议使用“ JoinableTaskFactory.Run”,但这是在Visual Studio程序包中的,我不打算为应该作为核心方法的东西而引入其他程序包。

那么在事件处理程序中处理长时间运行的任务的最佳实践是什么?

0 个答案:

没有答案