.NET 4.0 中 .NET 4.5 的 Task.FromResult() 等效项
Equivalent of Task.FromResult() from .NET 4.5 in .NET 4.0
我找不到有关将我的代码从 .NET 4.5 重定向到 4.0 的信息。我必须在 Windows XP 上安装此应用程序。
我在 .NET 4.5 中的代码
public async Task <IXLWorksheet> ImportFile(string fileToImport)
{
...
return await Task.FromResult<IXLWorksheet>(Sheet1)
}
在 .NET 4.0 中,FromResult 方法不存在。
有人知道它在 .NET 4.0 中的外观吗??
您正在返回任务的等待结果,该任务是根据结果构建的。解决方案相当简单 - 删除 await
:
return Sheet1;
方法声明中的 async
关键字将负责将其包装在任务中。
如果出于某种原因,您需要在已完成的任务中手动包装现有值,您可以使用 TaskCompletionSource
- 它比 Task.FromResult
有点笨拙,但也只是一点点。
我用 TaskCompletionSource
解决了我的问题,这是我的代码:
public async Task <IXLWorksheet> ImportFile(string fileToImport)
{
...
TaskCompletionSource<IXLWorksheet> tcs1 = new TaskCompletionSource<IXLWorksheet>();
Task<IXLWorksheet> t1 = tcs1.Task;
tcs1.SetResult(tempFile.Worksheet(1));
return await t1 ;
}
我找不到有关将我的代码从 .NET 4.5 重定向到 4.0 的信息。我必须在 Windows XP 上安装此应用程序。
我在 .NET 4.5 中的代码
public async Task <IXLWorksheet> ImportFile(string fileToImport)
{
...
return await Task.FromResult<IXLWorksheet>(Sheet1)
}
在 .NET 4.0 中,FromResult 方法不存在。 有人知道它在 .NET 4.0 中的外观吗??
您正在返回任务的等待结果,该任务是根据结果构建的。解决方案相当简单 - 删除 await
:
return Sheet1;
方法声明中的 async
关键字将负责将其包装在任务中。
如果出于某种原因,您需要在已完成的任务中手动包装现有值,您可以使用 TaskCompletionSource
- 它比 Task.FromResult
有点笨拙,但也只是一点点。
我用 TaskCompletionSource
解决了我的问题,这是我的代码:
public async Task <IXLWorksheet> ImportFile(string fileToImport)
{
...
TaskCompletionSource<IXLWorksheet> tcs1 = new TaskCompletionSource<IXLWorksheet>();
Task<IXLWorksheet> t1 = tcs1.Task;
tcs1.SetResult(tempFile.Worksheet(1));
return await t1 ;
}