码迷,mamicode.com
首页 > 其他好文 > 详细

Task 使用

时间:2019-01-14 14:48:13      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:返回值   summary   read   ati   分享   write   await   async   src   

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 使用

标签:返回值   summary   read   ati   分享   write   await   async   src   

原文地址:https://www.cnblogs.com/zkja/p/10265951.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!