Task的基本概念、使用方法和实例代码

基本概念

是一种用于异步编程的概念。Task的重要特点是可以在后台执行方法或操作,而不会阻塞主线程或UI线程。

封装的异步操作,表示执行的操作正在进行。可以表示一个方法的返回值或者表示执行的操作已经完成。

Task类的主要成员

    • 属性:TaskStatus、IsCanceled、IsCompleted、IsFaulted、Exception等
    • 方法:Start()、RunSynchronously()、Wait()、WaitAll()、WaitAny()等
    • 事件:Completed、Canceled、Faulted等

Task的使用方法

    1. 使用Task.Factory.StartNew()创建Task
    1. 异步运行一个方法或Lambda表达式,立即返回Task对象,然后异步执行方法或Lambda表达式
    1. 使用Task.Run()创建Task
    2. 使用TaskCompletionSource创建Task
    1. TaskCompletionSource是一个类,允许我们手动创建并控制异步返回值的Task对象。通常,异步操作的返回值是在异步操作完成时由异步方法设置的,但如果需要手动设置异步操作的返回值,可以使用TaskCompletionSource
    1. Task的等待和结果获取
    1. Task.Wait()、Task.Result或await关键字来等待Task对象完成并获取异步操作结果
    1. 案例
#region 等待异步完成

Task<int> task = Task.Run(() =>
                          {
    Console.WriteLine("Task Run");
    return 42;
});
task.Wait();
int result = await task;
Console.WriteLine(result);
int result1 = task.Result;
Console.WriteLine(result1);
#endregion

 

    1. Task的示例代码
//并行编程
Parallel.For(1, 100, i =>
{
    Console.WriteLine($"Task {i} is running");
});

//异步编程
Task.Run(() =>
{
    Console.WriteLine("异步执行任务");
});


//Task.WhenAll示例代码
List<Task> tasks = new List<Task>();
for (int i = 0; i < 10; i++)
{
    int index = i;
    tasks.Add(Task.Run(() =>
    {
        Console.WriteLine($"Task {index} is running");
    }));
}
Task.WhenAll(tasks).Wait();

 

 

点击查看代码 ``` ```
posted @ 2023-07-12 11:50  小溪_1  阅读(343)  评论(0编辑  收藏  举报