Task.Factory.StartNew 示例
时间: 2024-12-18 08:29:39 浏览: 5
Task.Factory.StartNew 是 .NET Framework 中的一个静态方法,它用于异步地执行一个操作,并返回一个 Task 对象,该对象代表该任务的完成。这个方法通常在需要非阻塞的方式启动一个新的工作线程或者后台任务的情况下使用。
示例代码:
```csharp
using System;
using System.Threading.Tasks;
public class MainClass
{
public static void Main(string[] args)
{
// 使用 StartNew 启动一个异步任务
Task.Run(() =>
{
Console.WriteLine("开始执行耗时任务...");
// 这里可以放置一些需要长时间运行的操作,比如数据库查询、文件读写等
Thread.Sleep(5000); // 模拟耗时操作
Console.WriteLine("耗时任务已完成");
});
// 主线程不会等待任务完成,可以直接继续执行其他代码
Console.WriteLine("主线程正在执行...");
}
}
相关问题
Task.Factory.StartNew 开启多任务 示例
`Task.Factory.StartNew` 是.NET Framework中的一个方法,用于异步地启动一个新的工作线程并执行给定的任务。它通常用于处理那些不需要立即返回结果,但又希望在后台运行的工作。下面是一个简单的示例:
```csharp
using System;
using System.Threading.Tasks;
public class WorkerTask
{
public void DoWork()
{
Console.WriteLine($"Worker task started at {DateTime.Now}");
// 这里可以放置需要执行的耗时操作
System.Threading.Thread.Sleep(5000); // 模拟长时间操作
Console.WriteLine($"Worker task finished at {DateTime.Now}");
}
}
class Program
{
static async Task Main(string[] args)
{
// 使用Task.Factory.StartNew启动一个新的工作线程
var task = Task.Factory.StartNew(() =>
{
var worker = new WorkerTask();
worker.DoWork();
});
Console.WriteLine("Main thread continues...");
// 等待工作完成,但主线程不会阻塞
await task;
Console.WriteLine("Task completed, exiting.");
}
}
```
在这个例子中,`DoWork` 方法会在新的工作线程上执行,而 `Main` 方法会继续执行,显示 "Main thread continues..."。当 `DoWork` 完成时,`await task` 会结束,然后显示 "Task completed, exiting."。
Task.Factory.StartNew 开启多任务 示例 带参数
`Task.Factory.StartNew` 是.NET Framework中的一个静态方法,用于创建并启动一个新的后台线程执行给定的任务,即使当前主线程已经满负荷。它的基本用法是接受一个Action或者Func作为参数,这两个类型的委托都可以作为无返回值的匿名函数执行。
下面是一个示例,展示了如何使用 `Task.Factory.StartNew` 来开启一个新的任务,传递一个带参的方法:
```csharp
using System;
using System.Threading.Tasks;
public class Program
{
public static void DoWork(int数, string消息)
{
Console.WriteLine($"在新的线程上工作,参数是 {数} 和 {消息}");
// 这里可以放置需要执行的具体代码
Thread.Sleep(2000); // 模拟耗时操作
}
public static void Main()
{
int number = 5;
string message = "Hello from parent thread";
// 创建并启动新任务
var task = Task.Factory.StartNew(() =>
{
DoWork(number, message);
});
// 主线程继续执行其他任务
Console.WriteLine("Parent thread is still working...");
// 等待新任务完成
try
{
task.Wait(); // 如果你想阻塞直到任务完成,可以使用Wait()
}
catch (AggregateException ex)
{
// 处理可能出现的异常
foreach (var inner in ex.InnerExceptions)
{
Console.WriteLine(inner.Message);
}
}
Console.WriteLine("All tasks finished.");
}
}
```
在这个例子中,`DoWork` 方法会在一个新的线程上执行,而主线程将继续执行。当你按下回车或关闭控制台窗口时,你会看到 "Parent thread is still working...",然后是新线程执行的结果。
阅读全文