Re[2]: Насколько корректен этот AsyncLock?
От: IObserver Ниоткуда  
Дата: 27.09.12 11:30
Оценка:
Здравствуйте, samius, Вы писали:

S>Воткните ка перед ReadLine слип, а то он походу блокирует консоль от вывода на нее WriteLine-ов из другого потока (на правах предположения).


Переписал с Debug.WriteLine -- разницы нет. Поток только один (см. код ниже).

class Program
    {
        static readonly AsyncLock al = new AsyncLock();
        static bool called = false;

        static void Main(string[] args)
        {
            AsyncCaller();
            Console.ReadLine();
        }

        static async void AsyncCaller()
        {
            await DoItAsync();
            Debug.WriteLine(Thread.CurrentThread.ManagedThreadId.ToString());
            Debug.WriteLine("Done");
        }

        static async Task DoItAsync()
        {
            Debug.WriteLine(Thread.CurrentThread.ManagedThreadId.ToString());
            Debug.WriteLine("before lock");

            using (await al.LockAsync())
            {
                Debug.WriteLine(Thread.CurrentThread.ManagedThreadId.ToString());
                Debug.WriteLine("after lock"); // Не вызывается второй раз!!!

                if (!called)
                {
                    called = true;
                    await DoItAsync();
                }
            }
        }
    }
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.