я хочу сделать следующее:Как выполнять задачи синхронно и в порядке FIFO в Windows Runtime?
- Выполнить некоторые действия в порядке вызова функции планирования.
- Выполняйте их исключительно и дождитесь завершения действий верхнего уровня перед тем, как начать следующее действие.
Я написал следующий код, но мне он не нравится. Есть ли способ лучше? Может быть, я должен каким-то образом реализовать TaskScheduler, но я не знаю, как ждать функций верхнего уровня.
sealed class TaskSequence
{
readonly object _critical = new object();
Task _head;
public Task<TResult> RunAsync<TResult>(Func<TResult> action)
{
lock (_critical)
{
var _previous = _head;
var _next = Task.Run(() => TaskFunc(_previous, action));
_head = _next;
return _next;
}
}
static async Task<TResult> TaskFunc<TResult>(Task _previous, Func<TResult> action)
{
if (_previous != null)
await _previous;
return action.Invoke();
}
}
ConcurrentExclusiveSchedulerPair будет прерывать функцию «ожидание» и продолжить следующую запланированную задачу. Так что на самом деле это будет «эксклюзивно», но вторая функция начнет выполнение _before_ первая функция закончится. Это нежелательное поведение. – norekhov
@norekhov: Что вы ожидаете от 'await'? 'Func' не может иметь 'await'. –