Task 使用
Posted zkja
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Task 使用相关的知识,希望对你有一定的参考价值。
Task 常规使用
无返回值Task
普通的无返回值方法:
static void Main(string[] args)
{
Console.WriteLine("开始调用");
GetTest();
Console.WriteLine("结束调用");
}
/// <summary>
/// 普通无返回值方法
/// </summary>
static void GetTest() {
Console.WriteLine("普通无返回值方法");
}
实现异步的方法只用方法添加 ”async“”关键字, 方法内部有”await” 等待执行就可以了
static void Main(string[] args)
{
Console.WriteLine("开始调用");
GetTaskAsync();
Console.WriteLine("结束调用");
}
/// <summary>
/// 无返回值
/// </summary>
/// <returns></returns>
static async Task GetTaskAsync()
{
await Task.Delay(1000);
Console.WriteLine("测试方法");
}
效果图如下
当然如果方法无”async”和”await”想实现异步也是可以的,
需要开启一个任务,然后返回”Task.FromResult(0)”,当一个方法的返回类型”Task”的时候使用”Task.FromResult(0)”进行返回。
static void Main(string[] args)
{
Console.WriteLine("开始调用");
GetTask2();
Console.WriteLine("结束调用");
}
static Task GetTask2()
{
Task.Run(() =>
{
Thread.Sleep(1000);
Console.WriteLine("测试方法2");
});
return Task.FromResult(0);
}
效果图如下
带有返回值的Task
直接泛型返回类型即可
static void Main(string[] args)
{
Console.WriteLine("开始调用");
Task<string> task= GetTaskAsync();
Console.WriteLine("结束调用");
}
/// <summary>
/// 返回string类型的
/// </summary>
/// <returns></returns>
static async Task<string> GetTaskAsync()
{
await Task.Delay(5000);
Console.WriteLine("测试方法");
return "测试方法执行结束";
}
如果想获得异步方法的返回值”task.Result”即可,”task.Result”会等待线程,直至返回值返回,在继续当前线程。
static void Main(string[] args)
{
Console.WriteLine("开始调用");
Task<string> task= GetTaskAsync();
Console.WriteLine( task.Result);
Console.WriteLine("结束调用");
}
效果如下,变成了同步
如果在异步方法中使用,调用返回值就需要用”await”关键字
/// <summary>
/// 返回string类型的
/// </summary>
/// <returns></returns>
static async Task<string> GetTaskAsync()
{
Console.WriteLine("测试方法开始执行");
await Task.Delay(1000);
string str = await GetTaskAsync2();//异步方法直接调用
return str;
}
static async Task<string> GetTaskAsync2()
{
await Task.Delay(1000);
Console.WriteLine("测试方法2");
return "测试方法2执行结束";
}
以上是关于Task 使用的主要内容,如果未能解决你的问题,请参考以下文章