【问题标题】:Does c# build-in async method implement by TaskCompletionSource?c#内置异步方法是否由TaskCompletionSource实现?
【发布时间】:2022-02-15 07:12:24
【问题描述】:

像streamReader.ReadAsync/downloadAsync等很多异步方法,是不是应该使用TaskCompletionSource来实现?

比如socket/httpclient中的SendAsync方法。当IOCP发送完毕,然后IO线程池得到一个线程通知cpu工作完成,是否应该调用c#中的TaskCompletionSource.SetResult继续等待?

【问题讨论】:

    标签: c# .net asynchronous


    【解决方案1】:

    像streamReader.ReadAsync/downloadAsync等很多异步方法,是不是应该使用TaskCompletionSource来实现?

    有点。您可以将它们视为使用TaskCompletionSource<T>,这已经足够接近了。

    从技术上讲,他们跳过TaskCompletionSource<T> 并在Task 上使用非公共方法来做同样的事情。

    比如socket/httpclient中的SendAsync方法。当IOCP发送完毕,然后IO线程池获取线程通知cpu工作完成,是否应该调用c#中的TaskCompletionSource.SetResult继续等待?

    有时。一些 BCL 方法在 I/O 线程池 (IOCP) 线程上完成,但大多数在工作线程池线程上完成。这是为了避免任何后续工作(如await 之后的最终用户代码)阻塞 IOCP 线程。但是上次我检查时,可以在 I/O 线程上调用一些较低级别的回调(尤其是套接字)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-29
      相关资源
      最近更新 更多