在C#中,我们可以使用Task
使用Task
public async Task GetNumberAsync()
{
await Task.Delay(1000); // 模拟异步操作
return 42;
}
public async Task Main()
{
Task task = GetNumberAsync();
Console.WriteLine("异步操作开始");
// 等待异步操作完成并获取结果
int result = await task;
Console.WriteLine("异步操作完成,结果为:" + result);
}
使用TaskCompletionSource:
public Task GetNumberAsync()
{
TaskCompletionSource tcs = new TaskCompletionSource();
// 模拟异步操作
Task.Run(() =>
{
Thread.Sleep(1000);
tcs.SetResult(42);
});
return tcs.Task;
}
public async Task Main()
{
Task task = GetNumberAsync();
Console.WriteLine("异步操作开始");
// 等待异步操作完成并获取结果
int result = await task;
Console.WriteLine("异步操作完成,结果为:" + result);
}
这两种方法都可以实现并发编程,但在某些情况下,使用TaskCompletionSource可能更灵活,因为它允许手动设置异步操作的结果,而不必依赖于异步方法的返回值。