Асинхронный CTP для PostSubmitter с поддержкой отмены (CancellationTokenSource) и отчетом о ходе выполнения
-
27-10-2019 - |
Вопрос
Товарищи-разработчики!
У меня есть класс для публикации на веб-сайте с помощью POST или GET и чтения ответа.Теперь это все асинхронно, и пользовательский интерфейс не зависает.
Мне нужно обновить его, чтобы отменить отмену.Все используемые методы Async НЕ принимают токен отмены.Мне нужно понять, почему и каковы мои альтернативы.Если возможно, следует ли мне создать объект CancellationTokenSource внутри класса или параметризовать его из пользовательского интерфейса?
Во-вторых, мне нужно показать ход выполнения метода PostData ().Как мне это сделать?
Класс:
родовое словоПримечание. В итоге есть три метода загрузки файлов.Мне все еще нужно это выяснить, и прежде чем я это сделаю, мне нужно понять отчеты об отмене и ходе выполнения.
Связанный вопрос Асинхронный CTP для PostSubmitter
Любая помощь будет принята с благодарностью.
Решение
Вы поддерживаете прогресс и отмену, используя параметры IProgress<T>
и CancellationToken
.
Для отмены периодически проверяйте, запрошена ли отмена, вызывая CancellationToken.ThrowIfCancellationRequested
. Для получения дополнительной информации см. Отмена в MSDN .
Чтобы добиться прогресса, сначала нужно решить, какой «прогресс» имеет смысл. Например, если «прогресс» - это просто количество переданных байтов, то вы можете использовать IProgress<int>
. После того, как вы определились с типом прогресса, вызовите сгенерировать код кода , чтобы сообщить о ходе выполнения. При создании кода кодового тега следует помнить о двух вещах:
- Параметр
IProgress<T>.Report
может иметь значениеIProgress<T>
. -
IProgress<T>
работает асинхронно. Это означает, что вы должны либо: A) использовать тип значения дляnull
вIProgress<T>.Report
; Б) выполнить глубокую копию каждого объектаT
, переданного вIProgress<T>
; или C) создавать новый объектT
каждый раз, когда вы вызываетеIProgress<T>.Report
.