Re[7]: Объясните поведение ContinueWith(..., TaskContinuatio
От: StatujaLeha на правах ИМХО
Дата: 02.01.17 22:29
Оценка:
Здравствуйте, AK107, Вы писали:

AK>
AK>        private readonly ConcurrentDictionary<AsyncLogEventInfo, Task> pendingEvents = new ConcurrentDictionary<AsyncLogEventInfo, Task>();

AK>        protected sealed override void Write(AsyncLogEventInfo info)
AK>        {
AK>            var task = WriteAsync(info);

               //А может быть, что мы здесь переключимся и вызовем FlushAsync?
               //Мне кажется или что-то плохое может произойти?

AK>            pendingEvents.TryAdd(info, task);

AK>            task.ContinueWith(x =>
AK>            {
AK>                Task tmp;
AK>                pendingEvents.TryRemove(info, out tmp);
AK>            }, 
AK>            TaskContinuationOptions.ExecuteSynchronously);
AK>        }

...

AK>        protected override void FlushAsync(AsyncContinuation asyncContinuation)
AK>        {
AK>            Task.WhenAll(pendingEvents.Values)
AK>                .ContinueWith(x => asyncContinuation(x.Exception), TaskContinuationOptions.ExecuteSynchronously);
AK>        }
AK>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.