private void Button_Click(object sender, RoutedEventArgs e)
{
Trace.WriteLine("Task Start !");
DOTaskWithAsync();
Trace.WriteLine("Task End !");
Trace.WriteLine("----------------");
}
public static async void DOTaskWithAsync()
{
Trace.WriteLine("Await Taskfunction Start");
await Task.Run(() => {
Dotaskfunction();
});
}
public static void Dotaskfunction()
{
for (int i = 0; i <= 50; i++)
{
Trace.WriteLine(string.Format("task {0} has been done!", i));
}
}
结果是异步的,结果如下:
Task Start !
Await Taskfunction Start
task 0 has been done!
task 1 has been done!
Task End !
----------------
task 2 has been done!
task 3 has been done!
task 4 has been done!
task 5 has been done!
task 6 has been done!
task 7 has been done!
task 8 has been done!
task 9 has been done!
......
private async void Button_Click(object sender, RoutedEventArgs e)
{
Trace.WriteLine("Task Start !");
await DOTaskWithAsync();
Trace.WriteLine("Task End !");
Trace.WriteLine("----------------");
}
public static async Task DOTaskWithAsync()
{
Trace.WriteLine("Await Taskfunction Start");
await Task.Run(() => {
Dotaskfunction();
});
}
public static void Dotaskfunction()
{
for (int i = 0; i <= 50; i++)
{
Trace.WriteLine(string.Format("task {0} has been done!", i));
}
}
结果是同步的,结果如下:
Task Start !
Await Taskfunction Start
task 0 has been done!
task 1 has been done!
task 2 has been done!
task 3 has been done!
task 4 has been done!
......
task 45 has been done!
task 46 has been done!
task 47 has been done!
task 48 has been done!
task 49 has been done!
task 50 has been done!
Task End !
----------------
本文通过两个按钮点击事件的处理程序,演示了异步和同步任务执行的区别。在异步模式下,任务开始后立即返回,后续任务在主线程上继续执行,而耗时操作在后台线程上完成。在同步模式下,所有任务按顺序执行,耗时操作会阻塞主线程,直到操作完成。
593

被折叠的 条评论
为什么被折叠?



