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执行结束";
 }

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

时间: 2024-10-31 03:57:51

Task 使用的相关文章

Conductor Task Workers

由远程worker执行的conductor任务通过HTTP端点进行通信以轮询任务并更新执行状态. conductor提供了轮询任务的框架,管理执行线程并将执行状态更新回服务器.该框架提供了Java和Python中的库.可以通过使用用于任务管理的HTTP端点来添加其他语言支持. Java 实现Worker接口来实现任务.https://github.com/Netflix/conductor/blob/dev/client/src/main/java/com/netflix/conductor/c

C#,Task

1.Task.Run(); static void Main(string[] args) { long a = 9876545678, b = 987654567892; Task task = Task.Run(() => { Add(a, b); }); Console.ReadLine(); } static void Add(long a,long b) { Console.WriteLine("This is the Add method!"); Console.Wr

MapReduce源码分析之Task中关于对应TaskAttempt存储Map方案的一些思考

我们知道,MapReduce有三层调度模型,即Job-->Task-->TaskAttempt,并且: 1.通常一个Job存在多个Task,这些Task总共有Map Task和Redcue Task两种大的类型(为简化描述,Map-Only作业.JobSetup Task等复杂的情况这里不做考虑): 2.每个Task可以尝试运行1-n此,而且通常很多情况下都是1次,只有当开启了推测执行原理且存在拖后腿Task,或者Task之前执行失败时,Task才执行多次. 而TaskImpl中存在一个成员变

实现基于Task的异步模式

返回该系列目录<基于Task的异步模式--全面介绍> 生成方法 编译器生成 在.NET Framework 4.5中,C#编译器实现了TAP.任何标有async关键字的方法都是异步方法,编译器会使用TAP执行必要的转换从而异步地实现方法.这样的方法应该返回Task或者Task<TResult>类型.在后者的案例中,方法体应该返回一个TResult,且编译器将确保通过返回的Task<TResult>是可利用的.相似地,方法体内未经处理的异常会被封送到输出的task,造成返

基础总结篇之三:Activity的task相关

古人學問無遺力,少壯工夫老始成.紙上得來終覺淺,絕知此事要躬行.南宋.陸遊<冬夜讀書示子聿(yù)> 软件行业也是一样,多少前辈不遗余力的奋斗才出现了软件行业的繁荣的景象,其中已有不少成为大师级人物.今天我们站在伟人的肩膀上,自然会有不少的优势,但不要忘了,要在对技术的认知方面有所提升,仍需我们去实践,去实践. 今天我们来讲一下Activity的task相关内容. 上次我们讲到Activity的四种启动模式的时候,已经了解到一些关于task的技术,今天我再向大家介绍一下.task是一个具有栈结

哈理工2015暑假训练赛BNU16488 Easy Task(简单题)

A - Easy Task Time Limit:2000MS    Memory Limit:65536KB    64bit IO Format:%lld & %llu SubmitStatusPracticeZOJ 2969 Description Calculating the derivation of a polynomial is an easy task. Given a function f(x) , we use (f(x))' to denote its derivatio

Android Studio 中 FAILURE: Build failed with an exception. * What went wrong: Execution failed for task &#39;:compileDebugAidl&#39;.的问题解答

Android Studio 中 FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':compileDebugAidl'.的问题解答 完整的问题提示 Gradle: FAILURE:Build failed with an exception.*What went wrong:Execution failed for task ':compileDebugAidl'.>No

HDU 4864 Task(2014多校--贪心)

Task 比赛当时思路想的差不多,感觉能过的,该处理的也都处理到了,最后还是没过,可能是二分写错了吧-.- 大意:给你n个机器,m个要完成的任务,每个机器跟任务都有两个属性,机器是最大工作时间跟等级,任务是需要工作的时间跟等级.完成一个任务可以得到500*(工作时间)+2*(等级)的报酬.完成任务的条件是机器的工作时间满足任务的需要,等级要大于等于任务的等级,一个机器只能用一次,一个任务也只能用一个机器去完成.需要进行策略选择,使得完成更多的任务. 思路:开始想的就是贪心,也想到了贪心的时候时间

HDU 4864(多校)1004 Task

Problem Description Today the company has m tasks to complete. The ith task need xi minutes to complete. Meanwhile, this task has a difficulty level yi. The machine whose level below this task's level yi cannot complete this task. If the company comp

hdu 4869 Task(贪心)

题目链接:hdu 4869 Task 题目大意:有n台机器,m个任务,每个机器和任务都有有xi和yi,要求机器的xi,yi均大于等于任务的xi和yi才能执行任务.每台机器一天只能执行一个任务.要求完成的任务数尽量多,并且说金额尽量大.完成每个任务的金额为xi?500+yi?2 解题思路:贪心,mach[i][j]表示等级为i,时间为j的机器数量,task[i][j]表示等级为i,时间为j的机器数量.每次优先减少i,因为对应等级减少100,对应的金额代价也不会减少超过500(即时间减少1). 每次