我怎么知道异步(等待)操作是否已经在运行并等待应用程序中的完成。我在视图中有两个按钮,每个按钮绑定到两个不同的异步方法。如果单击button1并启动异步并等待其结果。并且在那个时候点击button2。我需要显示一条消息,即已经运行的异步方法已经存在,并且停止执行第二个异步方法。我怎样才能实现这一目标?
答案 0 :(得分: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;
...
}
@Peter Ritchie在评论中指出,更好的想法是在异步操作挂起时禁用其他按钮。你可以考虑使用它。
答案 1 :(得分:2)
Task
类具有Status
属性,可用于评估异步操作是否正在运行或已完成,或者即使它处于故障状态。
答案 2 :(得分:1)
您可以将已执行的Task
存储在表单中并查找其Status
属性:
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.
}
}
请注意,这不会处理您的任务可能处于Faulted
或Canceled
状态的情况,您也可能需要处理这种情况。