zoukankan      html  css  js  c++  java
  • C#异步编程基础

    1. 任务完成时的处理

     1 class Program
     2     {
     3         private static void Main(string[] args)
     4         {
     5             ProcessTaskAsync();
     6             Console.ReadLine();
     7         }
     8         static async Task ProcessTaskAsync()
     9         {
    10             //按顺序await每个任务
    11             //创建任务队列
    12             Task<int> taskA = DelayAndReturnAsync(5);
    13             Task<int> taskB = DelayAndReturnAsync(2);
    14             Task<int> taskC = DelayAndReturnAsync(8);
    15             var tasks1 = new[] { taskA, taskB, taskC };
    16             Console.WriteLine("============================");
    17             Console.WriteLine("============按顺序===========");
    18             foreach (var task in tasks1)
    19             {
    20                 var result = await task;
    21                 Console.WriteLine(result);
    22             }
    23             //输出5,2,8
    24 
    25             //按处理速度
    26             //创建任务队列
    27             Task<int> task1 = DelayAndReturnAsync(5);
    28             Task<int> task2 = DelayAndReturnAsync(2);
    29             Task<int> task3 = DelayAndReturnAsync(8);
    30             var tasks2 = new[] { task1, task2, task3 };
    31             Console.WriteLine("============================");
    32             Console.WriteLine("==========按处理速度=========");
    33             var processingTasks = tasks2.Select(async t =>
    34               {
    35                   var result = await t;
    36                   Console.WriteLine(result);
    37               }).ToArray();
    38             //等待全部处理过程完成
    39             await Task.WhenAll(processingTasks);
    40             //输出2,5,8
    41         }
    42         static async Task<int> DelayAndReturnAsync(int val)
    43         {
    44             await Task.Delay(TimeSpan.FromSeconds(val));
    45             return val;
    46         }
    47     }
    View Code

    2. 等待任意一个任务完成

     1 class Program
     2     {
     3         private static void Main(string[] args)
     4         {
     5             FirstRespondingUrlAsync();
     6             Console.ReadLine();
     7         }
     8         static async Task FirstRespondingUrlAsync()
     9         {
    10             var httpClient = new HttpClient();
    11             string url1 = "https://www.baidu.com";
    12             string url2 = "https://www.cnblogs.com/";
    13             //并发地开始两个下载任务
    14             Task<byte[]> task1 = httpClient.GetByteArrayAsync(url1);
    15             Task<byte[]> task2 = httpClient.GetByteArrayAsync(url2);
    16             //等待任意一个任务完成
    17             Task<byte[]> completedTask = await Task.WhenAny(task1, task2);
    18             //返回从URL得到的数据长度
    19             byte[] data = await completedTask;
    20             Console.WriteLine(data.Length);
    21         }
    22     }
    View Code
  • 相关阅读:
    LOJ6274 数字
    test20200415 看门人 和 WC2010 重建计划
    TJOI2018 Party 和 HDU4352 XHXJ's LIS
    LOJ3228 Tree Depth
    AGC026D Histogram Coloring
    LOJ3277 星座 和 BZOJ2616 PERIODNI
    LOJ2331 某位歌姬的故事 和 CF1327F AND Segments
    AGC024F Simple Subsequence Problem
    LOJ3278 收获
    LOJ3282 治疗计划
  • 原文地址:https://www.cnblogs.com/shiblog/p/10026462.html
Copyright © 2011-2022 走看看