c# - 当您无法到达管道时,一直异步是否有意义?

标签 c# async-await synchronous

<分区>

有时你有一个组件,例如HttpClient,仅提供异步方法。

当您可以“一直向上”到异步事件处理程序或异步操作方法时,这很好,因为根据我的理解,执行返回到 IIS 管道,例如,可以继续运行其他东西。

当您无法“一路向上”时,您必须在某个时候执行类似 .Result 的操作。

我的案例是托管 WCF 服务的 Windows 服务,该服务使用 HttpClient 从 API 获取一些数据。我的代码位于一个由接口(interface)绑定(bind)的方法中,该方法无法更改并且更改没有意义,因为应用程序已经直接管理线程而无需任务。

在那种情况下,最好是尽可能地“一直向上”并最终阻止或直接阻止异步方法并节省保存和恢复(等待)的复杂性和资源一直到似乎没有理由的顶部?

最佳答案

如果您阻止异步操作,您很可能会遇到死锁。检查这个答案https://stackoverflow.com/a/39371523/2138959以及问题的其他答案,以获得对该主题的动力。

在一般情况下,我建议使用 AsyncEx.Context .

这是 C# 异步作者的精彩文章 Await, SynchronizationContext, and Console Apps: Part 3 .

关于c# - 当您无法到达管道时,一直异步是否有意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52665447/

相关文章:

javascript - 在 jQuery/AJAX 中获取函数的responseText

c# - 在哪里可以获得 Microsoft.DirectX.dll?

c# - 绑定(bind) Canvas 上元素的位置

concurrency - Rust 异步等待 : check if any future in a list resolves to true concurrently?

python - 与 Django 一起同步读取分段上传

javascript - 用于顺序执行同步和异步函数的 jQuery Deferred 和 Promise

c# - 如何在 C# 中获取向量类型?

c# - C# 中的显式结构需要双重初始化值

node.js - nodejs koajs 异步等待未从 db.collection.find 获取值

c# - GC.WaitForPendingFinalizers 在异步方法中不起作用?