asyncs如何检测到返回时不应该继续?

时间:2016-10-13 19:09:09

标签: c# multithreading asynchronous

在等待异步时 - 用户可能会更改应用程序的状态。我们怎么办呢?例如 - 当异步方法正在编辑图像时 - 用户裁剪图像。这不仅仅是关于async关键字,而是关于任何第二个任务。

设置标志似乎既不切实际又容易出错。

那我们该如何处理呢? (当然,不仅仅是上面的例子。)

2 个答案:

答案 0 :(得分:2)

在您的示例中,在后台操作(假设它是某种增强功能)完成之前允许进一步的图像编辑操作是没有意义的。裁剪必须处理增强的结果,因为他们想要更改的图像数据在后台处理完成之前不存在。

所以从用户界面的角度来看,你绝对会使用一个标志,但是你只需要一个标志。如果正在进行任何操作,请不要让用户开始其他操作。他们可以准备好工具,缩放等等,但不能改变图像。

答案 1 :(得分:2)

  

在等待异步时 - 用户可能会更改应用程序的状态。我们怎么办呢?

有几种方法。

您可以阻止用户在进行其他操作时启动其他操作。一种常见的方法是禁用某些UI元素,以便可能启动第二个元素。

您可以对用户操作进行排队。

您可以使用cancellation来(尝试)停止任何正在进行的异步操作。

您可以使用“异步标记”,它只是操作创建和保存的简单值(如new object()),然后在应用结果之前在操作结束时进行双重检查 - 如果标签已更改,然后它知道其结果已过时。