1

我想在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;
}
4

1 回答 1

1

您可以使用Task.Run(() => action()),但在后台它会将其委托给ThreadPool. 而且ThreadPool也不一定会创建一个全新的Thread,它通常有一些正在被重用的线程。

于 2021-04-13T11:25:33.367 回答