C# 如何处理运行中的多个异步方法?
我如何知道异步(可等待)操作是否已经在运行并等待应用程序中完成。我在一个视图中有两个按钮,每个按钮绑定到两个不同的异步方法。如果单击按钮1,异步启动并等待其结果。此时,如果单击按钮2。我需要显示一条消息,说明已经有一个正在运行的异步方法,并停止第二个异步方法的执行。我怎样才能做到这一点C# 如何处理运行中的多个异步方法?,c#,asynchronous,windows-store-apps,winrt-xaml,winrt-async,C#,Asynchronous,Windows Store Apps,Winrt Xaml,Winrt Async,我如何知道异步(可等待)操作是否已经在运行并等待应用程序中完成。我在一个视图中有两个按钮,每个按钮绑定到两个不同的异步方法。如果单击按钮1,异步启动并等待其结果。此时,如果单击按钮2。我需要显示一条消息,说明已经有一个正在运行的异步方法,并停止第二个异步方法的执行。我怎样才能做到这一点 任务类有一个属性,可用于评估异步操作是否正在运行、是否已完成或是否处于故障状态。存储任务并检查IsCompleted属性 private Task pendingTask = Task.FromResult(0)
任务
类有一个属性,可用于评估异步操作是否正在运行、是否已完成或是否处于故障状态。存储任务并检查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;
...
}
正如@Peter Ritchie在评论中指出的,更好的方法是在异步操作挂起时禁用另一个按钮。你可以考虑使用它。 你可以在你的表单中存储执行的<代码>任务>代码>查找它的代码>状态< /代码>属性:
public class Form1
{
private Task fooTask = Task.FromResult(0);
public Task FooAsync()
{
return Task.FromResult(0);
}
public async void MyEventHandler(object sender, EventArgs e)
{
if (fooTask.Status == TaskStatus.Running)
{
// If we got here, the task is currently running. Notify someone
return;
}
// If we're here, the task isn't running.
}
}
注意,这不考虑任务可能处于
故障
或取消
状态的情况,您可能也需要处理这些情况。您正在运行的异步操作是否可以取消?禁用按钮启动任务似乎是一个更好的主意;不能单击已禁用的按钮。如果可以,任务就完成了。@PeterRitchie是的,非常好的主意。noob,考虑一下这是一个更好的选择。我想在点击第二个按钮时显示一条消息,如“已在运行”。如果按钮被禁用,我将无法捕捉该事件。斯利拉姆提到的方法似乎很好。让我先试试。