等待固定间隔的异步方法
Awaiting async method for fixed interval
我想等待固定时间间隔的异步方法。如果该时间间隔过去了,我想向用户显示加载图标并继续等待异步方法。
一旦响应可用,我想隐藏加载图标并显示结果。
有什么方法可以做到这一点?
有几种方法可以实现这一点。从我的头顶开始:
您可以在调用您的方法之前启动一个固定时间后显示忙碌指示器的计时器,并在该方法完成时停止计时器 and/or 隐藏忙碌指示器。
您可以将方法中的任务存储在变量中,使用 Task.WhenAny(...)
等待该任务和固定间隔任务 (Task.Delay(...)
),然后检查实际工作是否正常已完成,如果没有,请在显示繁忙指示器后等待工作任务。
哪一个(如果有的话)是最好的方法取决于您使用的 UI 框架和其他要求。
我会使用计时器。假设您使用的是 WPF:
public async Task DoStuff()
{
DispatcherTimer timer = new DispatcherTimer();
timer.Interval = new TimeSpan(0, 0, seconds);
timer.Tick += Timer_Tick;
timer.Start();
await YourTask();
timer.Stop();
this.Cursor = Cursors.Default;
}
private void Timer_Tick(object sender, EventArgs e)
{
this.Cursor = Cursors.Wait;
}
所以你的计时器应该启动了。当 YourTask 运行时,计时器会触发,并且应该将光标更改为等待光标。需要你的一些改进。
这并不难。
Task t = your task to wait;
Task timeout = Task.Delay(1000);
Task finished = await Task.WhenAny(timeout, t);
if (finished == timeout)
{
ShowLoadingIcon();
}
await t;
我想等待固定时间间隔的异步方法。如果该时间间隔过去了,我想向用户显示加载图标并继续等待异步方法。 一旦响应可用,我想隐藏加载图标并显示结果。 有什么方法可以做到这一点?
有几种方法可以实现这一点。从我的头顶开始:
您可以在调用您的方法之前启动一个固定时间后显示忙碌指示器的计时器,并在该方法完成时停止计时器 and/or 隐藏忙碌指示器。
您可以将方法中的任务存储在变量中,使用
Task.WhenAny(...)
等待该任务和固定间隔任务 (Task.Delay(...)
),然后检查实际工作是否正常已完成,如果没有,请在显示繁忙指示器后等待工作任务。
哪一个(如果有的话)是最好的方法取决于您使用的 UI 框架和其他要求。
我会使用计时器。假设您使用的是 WPF:
public async Task DoStuff()
{
DispatcherTimer timer = new DispatcherTimer();
timer.Interval = new TimeSpan(0, 0, seconds);
timer.Tick += Timer_Tick;
timer.Start();
await YourTask();
timer.Stop();
this.Cursor = Cursors.Default;
}
private void Timer_Tick(object sender, EventArgs e)
{
this.Cursor = Cursors.Wait;
}
所以你的计时器应该启动了。当 YourTask 运行时,计时器会触发,并且应该将光标更改为等待光标。需要你的一些改进。
这并不难。
Task t = your task to wait;
Task timeout = Task.Delay(1000);
Task finished = await Task.WhenAny(timeout, t);
if (finished == timeout)
{
ShowLoadingIcon();
}
await t;