等待异步方法固定间隔

时间:2018-08-06 13:24:21

标签: c# .net async-await task-parallel-library

我要等待异步方法固定的时间间隔。如果超过了这个间隔,我想向用户显示加载图标,并继续等待异步方法。 一旦响应可用,我想隐藏加载图标并显示结果。 有什么方法可以做到这一点?

3 个答案:

答案 0 :(得分:0)

有两种方法可以实现此目的。从我的头顶开始:

  • 您可以在调用方法之前的固定时间后启动一个显示忙碌指示器的计时器,并在该方法完成后停止计时器和/或隐藏忙碌指示器。

  • 您可以将方法中的任务存储在变量中,使用Task.Delay(...)等待该任务和固定间隔任务(Task.WhenAny(...)),然后检查实际工作是否完成以及是否显示忙碌指示器后,不必辛苦等待工作任务。

哪种方法(如果有)是最好的方法,取决于您使用的UI框架和其他要求。

也:What have you tried?

答案 1 :(得分:0)

我会使用一个计时器。假设您正在使用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运行时,计时器触发,应将光标更改为等待光标。需要您的一些改进。

答案 2 :(得分:0)

这并不难。

Task t = your task to wait;
Task timeout = Task.Delay(1000);
Task finished = await Task.WhenAny(timeout, t);

if (finished == timeout)
{
    ShowLoadingIcon();
}

await t;