gpt4 book ai didi

c# - 使用 async 和 await 回调

转载 作者:行者123 更新时间:2023-11-30 19:37:08 25 4
gpt4 key购买 nike

我对异步作业的执行顺序有疑问。

我会用例子来问我的问题,因为这样更容易理解。

这是来自https://msdn.microsoft.com/en-us/library/mt674882.aspx的官方例子有一些扭曲。

async Task<int> AccessTheWebAsync()
{
HttpClient client = new HttpClient();

//async operation:
Task<string> getStringTask = client.GetStringAsync("http://msdn.microsoft.com");

// You can do work here that doesn't rely on the string from GetStringAsync.
DoWork1();

// The await operator suspends AccessTheWebAsync.
string urlContents = await getStringTask;

DoWork2();

return urlContents.Length;
}

我可以说 DoWork2client.GetStringAsync 的回调吗?

如果是这样,DoWork2 不会在 client.GetStringAsync 完成后立即执行,如果 DoWork1 运行的时间比 client 长。 GetStringAsync.

我在这儿吗?

最佳答案

DoWork2 is not immediately executed following the completion of client.GetStringAsync if DoWork1 runs longer time than client.GetStringAsync

一旦您达到该点await client.GetStrinkAsyncDoWork1() 已经完成,从您的示例来看,它的执行看起来是同步的。 client.GetStringAsync 完成后,DoWork2 将设置为执行。

执行流程将是:

  1. GetStringAsync 异步启动。它会一直执行,直到遇到第一个内部 await,然后将控制权交还给 AccessTheWebAsync
  2. DoWork1() 开始。因为它是同步的,所以每个人都在等待它完成
  3. client.GetStringAsync 异步等待完成。 await 自然会将执行控制权交给它的调用者。
  4. 一旦 client.GetStringAsync 完成,执行将返回到 AccessTheWebAsync 并且 DoWork2() 将同步执行。
  5. urlContents.length 将被返回。

通常,第一个 await 关键字之后的所有内容都设置为该方法其余部分的延续。

关于c# - 使用 async 和 await 回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39286043/

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