如何解决在事件处理程序中处理异步操作的正确模式是什么?
我对异步编程的全部“全程下降”哲学完全失望。但是,.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程序包中的,我不打算为应该作为核心方法的东西而引入其他程序包。
那么在事件处理程序中处理长时间运行的任务的最佳实践是什么?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。