【发布时间】:2021-04-13 11:11:08
【问题描述】:
我想在 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;
}
【问题讨论】:
-
什么是动作?它在很大程度上取决于动作的底层实现,而不是你可以在不消耗线程的情况下透明地转换。
标签: c# .net asynchronous taskcompletionsource