c#中task.run用法
时间: 2024-09-13 22:07:13 浏览: 129
AsyncConsoleDemo_2:System.Threading.Tasks,异步Task,Task.Run(),await,Console.ReadKey(),Console.KeyAvailable
C#中的`Task.Run`方法主要用于在后台线程上启动一项任务,同时这个方法返回一个`Task`对象,它表示异步操作的未来完成。通常,`Task.Run`被用来执行一些计算密集型或IO密集型操作,以避免阻塞主线程。
当你调用`Task.Run`时,它会将给定的委托(通常是一个lambda表达式或方法引用)提交给线程池执行。线程池是一组可重用的工作线程,可以在需要时执行任务,而无需为每个任务创建新的线程,从而提高了性能和资源利用率。
下面是一个`Task.Run`的基本用法示例:
```csharp
using System;
using System.Threading.Tasks;
class Program
{
static void Main(string[] args)
{
// 在后台线程上执行耗时的操作
Task.Run(() =>
{
// 这里写耗时的操作代码
Console.WriteLine("执行耗时操作");
}).ContinueWith((antecedent) =>
{
// 这里可以处理耗时操作的结果或后续操作
Console.WriteLine("耗时操作完成");
});
// 主线程代码
Console.WriteLine("主线程继续执行其它操作");
Console.ReadLine(); // 防止程序立即退出
}
}
```
在这个例子中,`Task.Run`启动了一个后台任务来执行耗时的操作,主线程继续执行其它操作,而不会被阻塞。当后台任务完成后,可以使用`ContinueWith`方法来指定一个任务,该任务将在后台任务完成后执行。
需要注意的是,在.NET Core和.NET 5/6/7等更新版本中,`Task.Run`可能会检查是否在UI线程中调用,如果是,则可能会抛出异常,因为UI线程不允许在后台线程上进行更新。在这种情况下,你可能需要使用`Task.Run`的其他重载版本或使用`Task.ConfigureAwait`方法来处理。
阅读全文