gpt4 book ai didi

multithreading - 从 WaitHandle.Wait 构造任务

转载 作者:行者123 更新时间:2023-12-04 06:48:23 25 4
gpt4 key购买 nike

我选择返回 Task<T>Task从我的对象方法中提供 gui 的简单使用。一些方法只是等待其他类型的 waithandles 的互斥锁。有没有办法构造Task来自 WaitHandle.Wait()这样我就不必为此阻塞一个线程。

最佳答案

有一种方法可以做到这一点:您可以使用 ThreadPool.RegisterWaitForSingleObject 订阅 WaitHandle方法并通过 TaskCompletionSource 包装它类(class):

public static class WaitHandleEx
{
public static Task ToTask(this WaitHandle waitHandle)
{
var tcs = new TaskCompletionSource<object>();

// Registering callback to wait till WaitHandle changes its state

ThreadPool.RegisterWaitForSingleObject(
waitObject: waitHandle,
callBack:(o, timeout) => { tcs.SetResult(null); },
state: null,
timeout: TimeSpan.MaxValue,
executeOnlyOnce: true);

return tcs.Task;
}
}

用法:
WaitHandle wh = new AutoResetEvent(true);
var task = wh.ToTask();
task.Wait();

关于multithreading - 从 WaitHandle.Wait 构造任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13741694/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com