我想在IO-Bound中实现异步机制,如何在不消耗新线程的情况下使用TaskCompletionSource实现它?
以下示例用于在线程池中创建新线程,但我正在寻找 TaskCompletionSource 的新方法,而无需在线程池中创建新线程?!
public static Task RunAsync(Action action)
{
var tcs = new TaskCompletionSource<Object>(TaskCreationOptions.RunContinuationsAsynchronously);
ThreadPool.QueueUserWorkItem(_ =>
{
try
{
action();
tcs.SetResult(null);
}
catch(Exception exc) { tcs.SetException(exc); }
});
return tcs.Task;
}