我对C# 5新的async
/await
关键字完全不熟悉,我想知道如何最佳实现进度事件。
我希望Progress
事件在Task<>
本身上。我知道我可以将事件放在包含异步方法的类中,并在事件处理程序中传递某种状态对象,但对我来说,这似乎更像是一种变通而非解决方案。我可能还希望不同的任务在不同的对象中触发事件处理程序,这种方式听起来很混乱。
是否有一种类似于以下方式的方法:
var task = scanner.PerformScanAsync();
task.ProgressUpdate += scanner_ProgressUpdate;
return await task;
Report
方法完成(并返回)时,实际的报告尚未发生。如果您的T
是可变的,并且在传递给Report
之后更改了它,则会出现竞争条件。实际报告可能会看到旧值、新值或混合值(即某些字段的旧值和某些字段的新值)。 - Stephen Cleary