zoukankan      html  css  js  c++  java
  • 异步编程-编程指南

    此文仅为学习笔记,详见:https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/concepts/async/

    1、封装常规异步方法:方法以Async结尾,并且加上修饰符asyn,方法中用await调用异步方法,返回类型:void、Task 、Task<TResult>

    private async Task SumPageSizesAsync()
            {
                HttpClient client =
                    new HttpClient() { MaxResponseContentBufferSize = 1000000 };
                    byte[] urlContents = await client.GetByteArrayAsync(url);
                    DisplayResults(url, urlContents);
            }

    2、程序运行机制:调用异步方法时,会开启异步线程进行调用,后面的方法在注线程中继续执行;方法中await为异步运行标记点,在该点上,直到等待的异步操作完成后方法才能继续执行

    // 1.通常任务被创建后即等待
    var
    result = await someWebAccessMethodAsync(url);
    // 2.先异步并行再等待
    var myTask = someWebAccessMethodAsync(url); // . . . . . var result = await myTask;

    3、Task类的应用:借助Task来实现异步方法

    // 匿名方法
    await Task.Run(() => { Thread.Sleep(2000);});
    // Task.WhenAll应用于任务集合,所有任务都完成时完成
    Task<int>[] downloadTasks = downloadTasksQuery.ToArray();
    int[] lengths = await Task.WhenAll(downloadTasks);
    // 获取某一完成任务
    Task finished = await Task.WhenAny(allTasks);

     4、任务的取消

    CancellationTokenSource cts=new CancellationTokenSource();
    // 与任务绑定
    await AccessTheWebAsync(cts.Token)
    // 显式取消
    if (cts != null)
                {
                    cts.Cancel();
                }
    // 延迟取消
    cts.CancelAfter(2500);
    // 完成一个任务后取消其它任务
    Task<int> firstFinishedTask = await Task.WhenAny(downloadTasks); 
    cts.Cancel();

    5、使用异步进行文件访问

  • 相关阅读:
    Linux-Bond-Configure
    Kvm学习文档记录
    Can't locate Log/Dispatch.pm in @INC
    sas2ircu工具信息收集及磁盘定位
    python 之tornado 入门
    zabbix 监控 tomcat jmx
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
  • 原文地址:https://www.cnblogs.com/zzfy/p/12463194.html
Copyright © 2011-2022 走看看