Здравствуйте, 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>