gpt4 book ai didi

c# - 无尽的异步和等待?

转载 作者:太空狗 更新时间:2023-10-29 20:20:28 25 4
gpt4 key购买 nike

我对 async/await 不太了解:

异步方法内部必须有一个 await 调用是强制性的……但是如果有一个 await,那是因为它正在调用另一个异步方法,对吗?所以它似乎是一个无尽的异步方法链,等待内部调用另一个异步方法。

那么是否可以创建一个“第一个”异步方法,而不是在内部调用任何其他异步方法。只需创建一个异步方法,因为该方法会执行大量可能会降低系统速度的工作。

最佳答案

首先,一些说明

一个方法不需要等待成为async ,反之亦然。您只能使用 awaitasync方法。您可能有一个返回 Task 的方法没有被标记为 async .更多 here .

您的实际问题

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

这些任务有两种类型:A Delegate Task and a Promise Task .

  1. Task.Run 触发了一个委托(delegate)任务(大多数时候。Task.StartNewnew Task(() => {}); 是其他选项)并且它有要运行的代码。这主要用于卸载工作。
  2. Promise 任务是 Task它实际上并不执行任何代码,它只是一种a. 等待完成时 Task 的通知的机制。 . b. 信号完成使用 Task .这是用 TaskCompletionSource 完成的并且主要用于固有的异步操作(但也用于 async synchronization objects )例如:

.

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 ),你很少会使用它们。

关于c# - 无尽的异步和等待?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24530108/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com