首页 > 编程语言 >C# 中 Task

C# 中 Task

时间:2024-08-28 11:15:14浏览次数:7  
标签:Task Run C# await static 操作 async

1. Task,它代表了一个异步操作的执行和完成。可以用来封装一个异步操作,使其可以在不阻塞主线程的情况下执行,并在操作完成后获取结果。

2. 示例:UseMethodAsync()通过Task.Run 将该操作提交给线程池,并使用 await 等待其完成获取到结果。

static async Task<int> LongOperationAsync()
{    
    // 模拟耗时操作    
    await Task.Delay(1000);    
    return 42; // 假设这是耗时操作的返回结果
}

static async Task UseMethodAsync()
{    
    int result = await Task.Run(() => LongOperationAsync());    
    Console.WriteLine($"操作结果: {result}");
}

3. 使用Task处理并行任务,并等待全部完成后获取结果(多个Task任务完成,新的任务才会完成)

static async Task ParallelProcessingAsync()
{    
    Task<int> task1 = Task.Run(() => LongOperationAsync());    
    Task<int> task2 = Task.Run(() => LongOperationAsync());    
    Task<int> task3 = Task.Run(() => LongOperationAsync());
    // 等待所有任务完成    
    await Task.WhenAll(task1, task2, task3);
    // 可以继续处理任务结果    
    Console.WriteLine("所有任务已完成");
}

4. Task中的取消

static async Task<int> LongOperationWithCancellationAsync(CancellationToken cancellationToken)
{    
    await Task.Delay(1000, cancellationToken);    
    return 42;
}
static async Task MyMethodWithCancellationAsync()
{    
    using (var cts = new CancellationTokenSource())    
    {        
        Task<int> task = Task.Run(() => LongOperationWithCancellationAsync(cts.Token));                
        // 模拟超时逻辑,实际使用时可能基于其他条件        
        cts.CancelAfter(1000); // 1000毫秒(1秒)后取消任务
        try        
       {           
             int result = await task; 
             Console.WriteLine($"操作结果: {result}");        
       }        
       catch (OperationCanceledException)        
       {            
             Console.WriteLine("操作已被取消");        
       }    
    }
}

5.  Task中的错误处理

static async Task<int> OperationWithFailAsync()
{   
     // 模拟可能失败的操作    
    await Task.Delay(100);    
    throw new InvalidOperationException("操作失败");
}

static async Task HandleTaskAsync()
{   
    try   
   {       
       await Task.Run(() => OperationWithFailAsync());    
   }    
   catch (Exception ex)   
   {        
       Console.WriteLine($"发生错误: {ex.Message}");    
   }
}

 

标签:Task,Run,C#,await,static,操作,async
From: https://www.cnblogs.com/apple-hu/p/18384231

相关文章

  • Asp.Net Core中Typed HttpClient高级用法
    另一个常见的需求是根据不同的服务接口创建不同的HttpClient实例。为了实现这一点,ASP.NETCore提供了TypedHttpClient的支持。下面是使用TypedHttpClient的示例代码:publicinterfaceIExampleService{Task<string>GetData();}publicclassExampleService:IExampl......
  • 3D 建模和设计软件 Autodesk 3ds Max、Blender 和 AutoCAD 优缺点比较
    Autodesk3dsMax、Blender和AutoCAD是三款广泛使用的3D建模和设计软件,它们各有优缺点。以下是对这三款软件的比较:Autodesk3dsMax优点:强大的建模和渲染功能:提供丰富的建模工具和功能,特别适合建筑可视化、动画和游戏开发。强大的渲染引擎(如V-Ray、Arnold)支持高质量......
  • VMware Cloud Foundation 9 发布 - 领先的多云平台
    VMwareCloudFoundation9发布-领先的多云平台高效管理虚拟机(VM)和容器工作负载,为本地部署的全栈超融合基础架构(HCI)提供云的优势。请访问原文链接:https://sysin.org/blog/vmware-cloud-foundation-9/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgVMware......
  • Cloud Studio:颠覆传统的云端开发与学习解决方案
    CloudStudioCloudStudio(云端IDE)是一款基于浏览器的集成开发环境,它为开发者提供了一个高效、稳定的云端工作站。用户在使用CloudStudio时,无需进行任何本地安装,只需通过浏览器即可随时随地轻松访问和使用。这种无缝的访问方式不仅提升了工作效率,也极大地简化了开发流程,使得开......
  • ABC F(500)
    ABCF(*500)ABC364F-RangeConnectMSTProblemStatementThereisagraphwith\(N+Q\)vertices,numbered\(1,2,\ldots,N+Q\).Initially,thegraphhasnoedges.Forthisgraph,performthefollowingoperationfor\(i=1,2,\ldots,Q\)......
  • RapidCMS 几个常见漏洞
    侵权声明本文章中的所有内容(包括但不限于文字、图像和其他媒体)仅供教育和参考目的。如果在本文章中使用了任何受版权保护的材料,我们满怀敬意地承认该内容的版权归原作者所有。如果您是版权持有人,并且认为您的作品被侵犯,请通过以下方式与我们联系:[[email protected]]。我们将在确......
  • CAS5和CAS6自定义异常提示消息
    CAS5和CAS6自定义异常提示消息使用cas登录时,如果登录错误页面应该提示一下错误消息,cas自带的有一些,不适用的话就需要自定义自己的异常消息提示了。自定义异常提示消息自定义异常消息类例如:验证码异常消息类importjavax.security.auth.login.AccountExpiredException;......
  • H3C-IMC智能管理中心RCE漏洞复现
    0x01漏洞描述:autoDeploy接口中存在远程代码执行漏洞,未经身份攻击者可通过该漏洞在服务器端任意执行代码,写入后门,获取服务器权限,进而控制整个web服务器。该漏洞利用难度较低,建议受影响的用户尽快修复。0x02搜索语句:Fofa:(title="用户自助服务"&&body="/selfservice/java......
  • DSC远程归档存放在NFS盘
    目录1.节点1操作1.1下载并且配置NFS1.2节点2操作2.节点2操作2.1配置共享文件2.2节点1操作3.节点1的归档配置4.节点2的归档配置5.启动实例话不多说,直接开整!现在我们是节点1挂节点2,节点2挂节点1,俗称互挂!1.节点1操作这里我们先把节点1当服务端1.1下载并且配置NFS......
  • 3. JavaScript 变量声明
    var、let和const是JavaScript中用于声明变量的关键字,但它们在作用域、提升(hoisting)、以及是否可以重新赋值等方面存在一些重要的区别。1.作用域(Scope)var:具有函数作用域(functionscope),即如果在函数内部声明var变量,该变量在整个函数内都有效。如果在函数外部声明,则具......