Асинхронный CTP для PostSubmitter с поддержкой отмены (CancellationTokenSource) и отчетом о ходе выполнения

StackOverflow https://stackoverflow.com/questions/7832991

Вопрос

Товарищи-разработчики!

У меня есть класс для публикации на веб-сайте с помощью POST или GET и чтения ответа.Теперь это все асинхронно, и пользовательский интерфейс не зависает.

Мне нужно обновить его, чтобы отменить отмену.Все используемые методы Async НЕ принимают токен отмены.Мне нужно понять, почему и каковы мои альтернативы.Если возможно, следует ли мне создать объект CancellationTokenSource внутри класса или параметризовать его из пользовательского интерфейса?

Во-вторых, мне нужно показать ход выполнения метода PostData ().Как мне это сделать?

Класс:

родовое слово

Примечание. В итоге есть три метода загрузки файлов.Мне все еще нужно это выяснить, и прежде чем я это сделаю, мне нужно понять отчеты об отмене и ходе выполнения.

Связанный вопрос Асинхронный CTP для PostSubmitter

Любая помощь будет принята с благодарностью.

Это было полезно?

Решение

Вы поддерживаете прогресс и отмену, используя параметры IProgress<T> и CancellationToken.

Для отмены периодически проверяйте, запрошена ли отмена, вызывая CancellationToken.ThrowIfCancellationRequested. Для получения дополнительной информации см. Отмена в MSDN .

Чтобы добиться прогресса, сначала нужно решить, какой «прогресс» имеет смысл. Например, если «прогресс» - это просто количество переданных байтов, то вы можете использовать IProgress<int>. После того, как вы определились с типом прогресса, вызовите сгенерировать код кода , чтобы сообщить о ходе выполнения. При создании кода кодового тега следует помнить о двух вещах:

  1. Параметр IProgress<T>.Report может иметь значение IProgress<T>.
  2. IProgress<T> работает асинхронно. Это означает, что вы должны либо: A) использовать тип значения для null в IProgress<T>.Report; Б) выполнить глубокую копию каждого объекта T, переданного в IProgress<T>; или C) создавать новый объект T каждый раз, когда вы вызываете IProgress<T>.Report.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top