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