---.Net Framework 升级至4.5+
需要执行异步操作的方法 函数签名前加上 async 标示 标示这是一个异步方法
public async void Show(String Name)//异步方法
{
await InvokeFuncShow("i2");//执行异步操作 InvokeFuncShow异步操作的基本实现
}
在异步方法内执行异步操作
当一系列操作中出现await时 则所有await后的操作都会等待await执行完成之后再继续
Console.WriteLine("0000000000000000000000000000000000000");
InvokeFuncShow("i1");
Console.WriteLine("1111111111111111111111111111111111111");
await InvokeFuncShow("i2");//执行异步操作 InvokeFuncShow异步操作的基本实现
Console.WriteLine("222222222222222222222222222222222222222222");
InvokeFuncShow("i3");
Console.WriteLine("33333333333333333333333333333333333333");
await InvokeFuncShow("i4");
Console.WriteLine("4444444444444444444444444444444444444444");
执行会出现

其中i1与i2同步执行 但是i3i4需要等到i2完全执行完成之后方会执行
然后是异步操作的具体实现需要用 Task.Run(Func<>)来完成
public async Task InvokeFuncShow(String Name)
{
for (int i = 0; i < 10; i++)
{
Console.WriteLine(
await Task.Run(() =>
{
var Sleep = new Random(Guid.NewGuid().GetHashCode()).Next(1, 500);
System.Threading.Thread.Sleep(Sleep);
return Name + "|||" + DateTime.Now + "|||" + Sleep + "|||" + i;
}));
}
}
总结起来看 就是
async Task<T> _Func //函数名 需要async修饰
{
return await Task.Run(() => //具体实现
{
return T;
}));
}
}
完整Code
public async void Show(String Name)//异步方法
{
Console.WriteLine("0000000000000000000000000000000000000");
FuncShow("i1");
Console.WriteLine("1111111111111111111111111111111111111");
await FuncShow("i2");//执行异步操作 InvokeFuncShow异步操作的基本实现
Console.WriteLine("222222222222222222222222222222222222222222");
FuncShow("i3");
Console.WriteLine("33333333333333333333333333333333333333");
await FuncShow("i4");
Console.WriteLine("4444444444444444444444444444444444444444");
}
public async Task FuncShow(String Name)
{
for (int i = 0; i < 10; i++)
{
Console.WriteLine(
await Task.Run(() =>
{
var Sleep = new Random(Guid.NewGuid().GetHashCode()).Next(1, 500);
System.Threading.Thread.Sleep(Sleep);
return Name + "|||" + DateTime.Now + "|||" + Sleep + "|||" + i;
}));
}
}
public Task<String> TaskFunc(String Name, Int32 i)
{
return Task.Run(() =>
{
var Sleep = new Random(Guid.NewGuid().GetHashCode()).Next(1000, 5000);
System.Threading.Thread.Sleep(Sleep);
return Name + "|||" + DateTime.Now + "|||" + Sleep + "|||" + i;
});
}
main函数中调用
new AsyncFunc().Show("");
// new AsyncFunc().Show("");
Console.WriteLine(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
Console.ReadLine();
执行

--以上
原文:http://www.cnblogs.com/ikus/p/5719427.html