我正在实现一个异步接口方法(返回Task)。但是,我的实现必须是同步的。怎样最好地实现这一点?有没有内置的方法来做到这一点?以下是我正在考虑的几种选择:
Option 1: Task.FromResult
return Task.FromResult(ComputeResult());
这样做的好处是我的代码可以同步运行。缺点是如果ComputeResult()失败或被取消,我的方法会抛出异常而不是返回一个失败的任务。
Option 2: Task.Run
return Task.Run(() => ComputeResult());
Option 3: TaskCompletionSource
var tcs = new TaskCompletionSource<T>(); try { tcs.SetResult(ComputeResult()); } catch (OperationCanceledException) { tcs.SetCanceled(); } catch (Exception ex) { tcs.SetException(ex); } return tcs.Task;
ComputeResult
没有返回Task
。 - noseratio - open to work