我试图使用下面的函数不返回true/false,除非布尔函数arg返回true或超时到期.在当前状态下,如果布尔函数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;
}
Run Code Online (Sandbox Code Playgroud)
你需要使用await Task.Yield而不是Thread.Yield
if (Function())
{
return true;
}
await Task.Yield();
Run Code Online (Sandbox Code Playgroud)
如果您还想处理将异步委托传递给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;
}
Run Code Online (Sandbox Code Playgroud)
然后你可以这样做:
var result = await Wait(10000, async () => await Test());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2700 次 |
| 最近记录: |