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 使用的主要内容,如果未能解决你的问题,请参考以下文章

使用Task.Wait而不是等待异步编程

Leetcode:Task Scheduler分析和实现

Task运行过程分析1

Faster 情感分析-task03

膨胀类片段时出错

IFE_part1(task1-7)_blog.html总结