如何处理多个异步方法?

Tut*_*rge 2 c# asynchronous winrt-xaml winrt-async windows-store-apps

我怎么知道异步(等待)操作是否已经在运行并等待应用程序中的完成.我在视图中有两个按钮,每个按钮绑定到两个不同的异步方法.如果单击button1并启动异步并等待其结果.并且在那个时候点击button2.我需要显示一条消息,即已经运行的异步方法存在,并停止执行第二个异步方法.我怎样才能实现这一目标?

Sri*_*vel 7

存储任务并检查IsCompleted属性.

private Task pendingTask = Task.FromResult(0);

private async void Button1Click()
{
    if (!pendingTask.IsCompleted)
    {
        //Notify the user
        return;
    }

    pendingTask = DoSomethingAsync();
    await pendingTask;
    ...
}

private async  void Button2Click()
{
    if (!pendingTask.IsCompleted)
    {
        //Notify the user
        return;
    }

    pendingTask = DoSomethingElseAsync();
    await pendingTask;
    ...
}
Run Code Online (Sandbox Code Playgroud)

正如@Peter Ritchie在评论中指出的那样,更好的想法是在异步操作挂起时禁用其他按钮.你可以考虑使用它.

  • 禁用按钮启动任务似乎是一个更好的主意; 您无法单击已禁用的按钮.如果可以,任务就完成了. (2认同)