2013-11-21 5 views
0

Я создаю API для поддержки экспорта и прерывания работы. Например,Дизайн Api для экспорта и отмены экспорта

class Export 
    { 
     //starts an export operation. 
     void Start(); 
     //aborts an export operation 
     void Abort(); 
    } 

Клиенты могут быть приложениями Gui или non-Gui. Операция «Пуск» может занять некоторое время, чтобы выполнить свою работу, и между пользователями можно вызвать прерывание. Итак, как может api выглядеть как i.e вернуть значение этих методов? Должна ли начальная реализация нужна операция, которая должна быть запущена в новом потоке и немедленно возвращена или должна быть синхронной?

Подсказка: операция начала будет выполнять n заданий, и если задание (x, где x < n) запускается, то вызов прерывания должен ждать (не уверен, что здесь здесь хорошо, здесь также обсуждается) до xth job завершается и не следует начинать с x + 1-й операции.

Следовательно, когда абонент вызывается, должен ли он немедленно вернуться или как он должен быть?

Прямо сейчас, как я сделал это,

Start -> синхронными. Когда вызывается прерывание, он будет ждать, пока запуск не завершится с текущей операцией, а затем вернется, а затем метод отмены будет возвращен. Но почему-то я чувствую, что то, что я делаю, ошибочно.

Любая помощь приветствуется, спасибо заранее.

Примечание: Я также подумал о том, чтобы оба метода были асинхронными и уведомляли клиентов о завершении событиями, в которых «Начало завершено», «Аборт завершен».

ответ

2

Вы должны использовать Task-based Asynchronous Pattern и объявить свой метод экспорта аргументом CancellationToken.

Task ExportAsync(CancellationToken cancellationToken); 

Чтобы отменить операцию, просто вызовите Cancel() на CancellationTokenSource вы использовали для создания CancellationToken вы прошли в вызове.

+0

Полезно знать о различных асинхронных шаблонах, спасибо :) – srsyogesh

+0

Если мне нужно иметь только экспорт и отмену, то он (TAP) будет лучшим подходом, но если я захочу расширить этот интерфейс с помощью Pause и продолжить работа. Вы все еще чувствуете, что у нас может быть расширение с помощью TAP? – srsyogesh

Смежные вопросы