博客
关于我
C# Async和Await异步任务
阅读量:522 次
发布时间:2019-03-08

本文共 3173 字,大约阅读时间需要 10 分钟。

C# 异步方法入门指导

C# 提供了一种强大的异步编程模型,使开发者能够在不阻塞主线程的情况下执行耗时任务。本节将详细介绍如何使用异步方法,并通过代码示例展示其应用场景。

异步方法的基本语法

在 C# 中,方法前加上 async 关键字即可将其变为异步方法。异步方法可以返回以下几种类型:

  • void
  • Task<TResult>(如 Task<bool>, Task<string>

异步方法命名示例

为了让程序中的异步方法更直观,我们常常在方法名称后面加上 Async 进行区分。例如:

  • void ReadFileAsync(string fileName)

这种命名习惯能够让开发者一目了然地知道方法是否是异步执行的。

异步方法的执行流程

在异步方法的实现部分,为了确保耗时任务能够非阻塞地执行,通常会在方法体内使用 await 关键字。await 会暂停当前线程,等待任务完成后再继续执行后续代码。

示例代码实现

public async Task
TestAsync(){ return await Task.Run(() => { Thread.Sleep(100); Thread currentThread = Thread.CurrentThread; Console.WriteLine("这里开始执行一个用时较长的任务.标识【{0}】,优先级【{1}】,是后台线程【{2}】", currentThread.ManagedThreadId, currentThread.Priority, currentThread.IsBackground); for (int i = 0; i < 3000000; i++) { Interlocked.Increment(ref location); } Console.WriteLine("任务执行完毕!结果【{0}】.标识【{1}】,优先级【{2}】,是后台线程【{3}】", location, currentThread.ManagedThreadId, currentThread.Priority, currentThread.IsBackground); return true; });}

异步任务的优雅管理

在实际开发中,为了保证应用程序的性能和响应速度,合理管理异步任务至关重要。Task.WaitAll 方法用于等待多个任务同时完成,这在需要保证所有异步操作完成之前不继续后续操作的场景中非常有用。

测试程序完整代码

以下是完整的测试程序代码示例:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;using System.Threading.Tasks;namespace MethodAsyncDemo{    static void Main(string[] args)    {        Console.WriteLine("程序开始执行。。。主线程标识【{0}】,优先级【{1}】,是后台线程【{2}】",             Thread.CurrentThread.ManagedThreadId,             Thread.CurrentThread.Priority,             Thread.CurrentThread.IsBackground);        List
taskCollection = new List
(); for (int i = 0; i < 5; i++) { Task
task = TestAsync(); taskCollection.Add(task); } Console.WriteLine("这里非阻塞执行,如果遇到Wait将阻塞"); Thread.Sleep(120); Console.WriteLine("下面请等待所有线程(任务)执行完毕,阻塞中...请稍候。{0}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")); Task.WaitAll(taskCollection.ToArray()); Console.WriteLine("所有任务都已执行完毕.{0}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")); Console.WriteLine("继续执行其他流程"); Console.ReadLine(); } static int location = 0; ///
/// 异步任务 /// ///
static async Task
TestAsync() { return await Task.Run(() => { Thread.Sleep(100); Thread currentThread = Thread.CurrentThread; Console.WriteLine("这里开始执行一个用时较长的任务.标识【{0}】,优先级【{1}】,是后台线程【{2}】", currentThread.ManagedThreadId, currentThread.Priority, currentThread.IsBackground); for (int i = 0; i < 3000000; i++) { Interlocked.Increment(ref location); } Console.WriteLine("任务执行完毕!结果【{0}】.标识【{1}】,优先级【{2}】,是后台线程【{3}】", location, currentThread.ManagedThreadId, currentThread.Priority, currentThread.IsBackground); return true; }); }}

结论

通过上述指导和示例代码,可以清楚地看出 C# 异步方法的实现方式及其实际应用场景。在实际开发中,合理使用异步方法能够极大地提升程序的性能和用户体验。

转载地址:http://avqnz.baihongyu.com/

你可能感兴趣的文章
Objective-C实现markov chain马尔可夫链算法(附完整源码)
查看>>
Objective-C实现MATLAB中Filter函数功能(附完整源码)
查看>>
Objective-C实现matrix chainorder矩阵链顺序算法(附完整源码)
查看>>
Objective-C实现matrix exponentiation矩阵求幂算法(附完整源码)
查看>>
Objective-C实现MatrixMultiplication矩阵乘法算法 (附完整源码)
查看>>
Objective-C实现max non adjacent sum最大非相邻和算法(附完整源码)
查看>>
Objective-C实现max subarray sum最大子数组和算法(附完整源码)
查看>>
Objective-C实现max sum sliding window最大和滑动窗口算法(附完整源码)
查看>>
Objective-C实现MaxHeap最大堆算法(附完整源码)
查看>>
Objective-C实现MaximumSubarray最大子阵列(Brute Force蛮力解决方案)算法(附完整源码)
查看>>
Objective-C实现MaximumSubarray最大子阵列(动态规划解决方案)算法(附完整源码)
查看>>
Objective-C实现maxpooling计算(附完整源码)
查看>>
Objective-C实现max_difference_pair最大差异对算法(附完整源码)
查看>>
Objective-C实现max_heap最大堆算法(附完整源码)
查看>>
Objective-C实现MD5 (附完整源码)
查看>>
Objective-C实现md5算法(附完整源码)
查看>>
Objective-C实现MeanSquareError均方误差算法 (附完整源码)
查看>>
Objective-C实现median filter中值滤波器算法(附完整源码)
查看>>
Objective-C实现memcmp函数功能(附完整源码)
查看>>
Objective-C实现memcpy函数功能(附完整源码)
查看>>