C# 自定义Task示例
时间: 2023-09-05 07:09:58 浏览: 166
以下是一个使用 C# 自定义 Task 的示例:
```csharp
public class CustomTask
{
private readonly Func<int> _action;
private readonly TaskCompletionSource<int> _tcs;
public CustomTask(Func<int> action)
{
_action = action;
_tcs = new TaskCompletionSource<int>();
}
public Task<int> ExecuteAsync()
{
Task.Run(() =>
{
try
{
int result = _action();
_tcs.SetResult(result);
}
catch (Exception ex)
{
_tcs.SetException(ex);
}
});
return _tcs.Task;
}
}
```
在上面的示例中,我们创建了一个名为 CustomTask 的自定义类,该类接受一个 Func<int> 委托作为参数,并返回一个 Task<int> 对象。在 ExecuteAsync 方法中,我们在一个新线程上运行传入的委托,并在完成时调用 TaskCompletionSource 的 SetResult 或 SetException 方法来设置 Task 的结果或异常。
可以使用以下代码来使用 CustomTask 类:
```csharp
var task = new CustomTask(() => 42).ExecuteAsync();
int result = await task;
```
在上面的示例中,我们创建了一个 CustomTask 对象并将一个返回值为 42 的委托传递给它。然后我们调用 ExecuteAsync 方法来执行该任务,并使用 await 关键字等待其完成。当任务完成时,我们可以从返回的 Task<int> 对象中获取结果。
阅读全文