gpt4 book ai didi

c# - 创建循环直到 true 或超时的等待任务

转载 作者:太空狗 更新时间:2023-10-29 23:21:33 26 4
gpt4 key购买 nike

我正在尝试使用以下函数不返回 true/false,除非 bool 函数 arg 返回 true 或超时到期。在当前状态下,如果 bool 函数 arg 返回 false,它会立即返回 false,而不是循环并重试 X 毫秒。

 public delegate bool BooleanFunction ();

public static async Task<bool> Wait(uint Milliseconds, BooleanFunction Function)
{
var StartTime = Environment.TickCount;

do
{
if (Function())
{
return true;
}

Thread.Yield();
}
while (Environment.TickCount < StartTime + Milliseconds);

return false;
}

最佳答案

您需要使用 await Task.Yield 而不是 Thread.Yield

    if (Function())
{
return true;
}

await Task.Yield();

如果您还想处理将异步委托(delegate)传递给 Wait,请保留现有版本并添加以下重载:

public static async Task<bool> Wait(uint Milliseconds, Func<Task<bool>> Function)
{
var StartTime = Environment.TickCount;

do
{
if (await Function())
{
return true;
}

Thread.Yield();
}
while (Environment.TickCount < StartTime + Milliseconds);

return false;
}

然后你可以这样做:

   var result = await Wait(10000, async () => await Test());     

关于c# - 创建循环直到 true 或超时的等待任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32600552/

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