具有取消支持(CancellationTokenSource)和进度报告的后提交者的异步CTP
-
27-10-2019 - |
题
资深开发者!
我有一个使用POST或GET发布到网站并阅读响应的类。现在都是异步的,不会导致UI挂起。
我需要升级它才能处理取消。所有正在使用的异步方法都不接受取消令牌。我需要了解为什么以及我的替代方案是什么。如果可能,我应该在类中创建CancellationTokenSource对象,还是从UI中对其进行参数化设置?
第二,我需要公开PostData()方法的进度。我该怎么办?
课程: 通用标签
注意:最后有三种方法用于文件上传。我仍然需要弄清楚然后再做,在此之前,我需要了解“取消和进度”报告。
任何帮助将不胜感激。
解决方案
通过采用IProgress<T>
和CancellationToken
参数来支持进度和取消。
要取消,请通过调用CancellationToken.ThrowIfCancellationRequested
定期检查是否已请求取消。有关更多信息,请参见在MSDN上的取消。
要取得进步,您首先需要确定哪种“进步”才有意义。例如,如果“ progress”只是传输的字节数,则可以使用IProgress<int>
。确定进度类型后,请致电 IProgress<T>.Report
报告进度。对于IProgress<T>
,有两件事要注意:
-
IProgress<T>
参数可以是null
。 -
IProgress<T>.Report
异步运行。这意味着您必须:A)为T
中的IProgress<T>
使用值类型; B)对传递给T
的每个IProgress<T>.Report
对象执行深拷贝;或C)每次您调用T
时,都会创建一个新的IProgress<T>.Report
对象。
不隶属于 StackOverflow