Всем доброе утро!



Я часто прохожу собеседования, на одном из последних встретил интересную задачу.



Решение выложу после 10 неудачных попыток в комментариях.



Надо определить, что будет выведено на экране. Допустим, у изначального потока id равен 1, а при смене потока ему можно присвоить любой другой (2, 3, 10, 77 и так далее).





public static async Task<int> GetValue1()

{

Console.WriteLine(Thread.CurrentThread.ManagedThreadId); // ?

return await Task.FromResult(100500);

}



public static async Task<int> GetValue2()

{

Console.WriteLine(Thread.CurrentThread.ManagedThreadId); // ?

return 500100;

}





public static Task<int> GetValue3()

{

Console.WriteLine(Thread.CurrentThread.ManagedThreadId); // ?

return Task.Run(() => 500100);

}



static async Task Main(string[] args)

{

Console.WriteLine(Thread.CurrentThread.ManagedThreadId); // 1

var val1 = await GetValue1();

Console.WriteLine(Thread.CurrentThread.ManagedThreadId); // ?

var val2 = await GetValue2();

Console.WriteLine(Thread.CurrentThread.ManagedThreadId); // ?

var val3 = await GetValue3();

Console.WriteLine(Thread.CurrentThread.ManagedThreadId); // ?

}