C#异步编程----async和await组合的写法微软⽰例:
private async void StartButton_Click(object sender, RoutedEventArgs e)
{
// ExampleMethodAsync returns a Task<int>, which means that the method
// eventually produces an int result. However, ExampleMethodAsync returns
// the Task<int> value as soon as it reaches an await.
ResultsTextBox.Text += "\n";
try
{
int length = await ExampleMethodAsync();
// Note that you could put "await ExampleMethodAsync()" in the next line where
/
/ "length" is, but due to when '+=' fetches the value of ResultsTextBox, you
// would not see the global side effect of ExampleMethodAsync setting the text.
ResultsTextBox.Text += String.Format("Length: {0}\n", length);
}
catch (Exception)
{
// Process the exception if one occurs.
}
}
public async Task<int> ExampleMethodAsync()
{
var httpClient = new HttpClient();
int exampleInt = (await httpClient.GetStringAsync("msdn.microsoft")).Length;
ResultsTextBox.Text += "Preparing to finish ExampleMethodAsync.\n";
// After the following return statement, any method that's awaiting
// ExampleMethodAsync (in this case, StartButton_Click) can get the
// integer result.
return exampleInt;
}
// Output:
// Preparing to finish ExampleMethodAsync.
// Length: 53292
上⾯是微软给的写法,给按钮的响应⽅法加上async,然后await ExampleMethodAsync
但是其实async和await表达式写法:
await和async使用方法private async void button_Click(object sender, RoutedEventArgs e)
{
TB_Result.Text = await exampleAsync();
}
private async Task<string> exampleAsync()
{
return await Task.Run(() =>
{
WebClient w = new WebClient();
w.DownloadFile("provissy", "webPage1");
w.DownloadFile("microsoft", "webPage2");
string a = w.DownloadString("microsoft");
return a;
});
}
Task.Run 和 Lambda表达式,⽤起来其实更加简单。
在 => { }范围内写任何代码都是异步执⾏的,因此不⽤担⼼某⼏个语句是否会长时间堵住UI线程。
当然,你不能访问UI线程,否则会抛出异常。
要是访问UI线程,可以加上Dispacter.BeginInvoke();
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论