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