无尽的异步和等待?

莫尔戈斯

我对异步/等待一无所知:

强制异步方法必须在内部有一个await调用...但是,如果有一个等待,那是因为它正在调用另一个异步方法,对吗?因此,这似乎是无穷无尽的异步方法链,其中包含等待调用另一个异步方法的内部。

因此可以创建一个“第一个”异步方法,而不在内部调用任何其他异步方法。只需创建一个异步方法,因为该方法会做很多工作,可能会减慢系统速度。

i3arnon

首先,一些澄清

方法不需要等待,反之亦然async您只能awaitasync方法中使用可能有一个返回的方法,Task而没有将其标记为async这里更多

您的实际问题

IIUC是关于“所有异步的根源”所以,是的,这有可能创造“第一”的async方法。它只是返回Task(或Task<T>)的方法。

这些任务有两种类型:委托任务和承诺任务

  1. 委托任务被触发Task.Run(大多数情况下Task.StartNewnew Task(() => {});也是其他选项),并且它具有要运行的代码。这主要用于卸载工作。
  2. 一个Promise Task是一个Task实际上不执行任何代码的任务,它只是a的一种机制等待被完成后通知通过Taskb。完成信令使用Task这是通过以下方式完成的,TaskCompletionSource并且通常用于固有的异步操作(但也用于async同步对象),例如:

private static Task DoAsync()
{
    var tcs = new TaskCompletionSource<int>();
    new Thread(() =>
    {
        Thread.Sleep(1000);
        tcs.SetResult(5);
    }).Start();

    return tcs.Task;
}

这些工具允许您创建那些“根”,但是除非您自己实现一个I/O库(如.NetDNS类)或一个同步对象(如SemaphoreSlim),否则很少使用它们。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章