gpt4 book ai didi

c# - 寻找指导以了解如何使用Async和Await进行异步编程

转载 作者:太空宇宙 更新时间:2023-11-03 18:09:07 25 4
gpt4 key购买 nike

我通过了一个msdn示例代码,其中在单击按钮时调用了一个函数,在调用了例程后又使用了Await关键字,而函数使用了async关键字。

private async void StartButton_Click(object sender, RoutedEventArgs e)
{

int contentLength = await AccessTheWebAsync();

resultsTextBox.Text +=
String.Format("\r\nLength of the downloaded string: {0}.\r\n", contentLength);
}

async Task<int> AccessTheWebAsync()
{
HttpClient client = new HttpClient();
Task<string> getStringTask = client.GetStringAsync("http://msdn.microsoft.com");
DoIndependentWork();
string urlContents = await getStringTask;

return urlContents.Length;
}


void DoIndependentWork()
{
resultsTextBox.Text += "Working . . . . . . .\r\n";
}



调用 AccessTheWebAsync时,将使用await关键字,这是什么意思?
当此函数AccessTheWebAsync()将被执行时,将调用 DoIndependentWork()函数,我猜这里控件将一直等到该函数 DoIndependentWork()完成。我对吗?


再次有另一个声明叫做

string urlContents = await getStringTask;


他们为什么在这里使用等待。如果我们不在这里使用await,那会发生什么?

请指导我了解其工作方式的代码。

最佳答案

这是有关异步/等待方法的简要说明。

异步方法:


调用者不一定要完全阻止异步执行
方法
可能的退货类型

void:“一劳永逸”
Task:允许等待异步方法的终止
Task<T>:允许等待终止并获得类型T的结果

没有ref或out参数用于异步方法
必须再次包含一个await =>否则编译警告


等待任务


等待TPL任务的终止
返回任务的结果(如果任务与
结果类型)
必须仅在异步方法中出现=>否则编译错误


异步方法部分是同步的,部分是异步的


调用者同步执行该方法,直到等待阻塞
之后,方法rest异步执行
异步等待机制
高效的




public async Task<int> GetSiteLengthAsync(string url) 
{
HttpClient client = new HttpClient(); <= Sync
Task<string> download1 = client.GetStringAsync(url); <= Sync
string site1 = await download1; <= Async (Another thread)
return site1.Length; <= Async (Another thread)
}

关于c# - 寻找指导以了解如何使用Async和Await进行异步编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19929208/

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