- код для консольного приложения:
Код: Выделить всё
async static Task Main()
{
Helper.PrintThreadId("Before");
await FooAsync();
Helper.PrintThreadId("After");
}
async static Task FooAsync()
{
Helper.PrintThreadId("Before");
await Task.Delay(1000);
Helper.PrintThreadId("After");
}
class Helper
{
private static int index = 1;
public static void PrintThreadId(string message = null, [CallerMemberName] string name = null)
{
var title = $"{index}: {name}";
if (!string.IsNullOrEmpty(message))
title += $" @ {message}";
Console.WriteLine("Thread ID: " + Environment.CurrentManagedThreadId + ", title: " + title);
Interlocked.Increment(ref index);
}
}
- код для wpf (помощник точно такой же, как и в консольном приложении):
Код: Выделить всё
async Task HeavyJob()
{
Helper.PrintThreadId("Before");
await Task.Delay(3000);
Helper.PrintThreadId("After");
return 10;
}
private async void Button_Click(object sender, RoutedEventArgs e)
{
Helper.PrintThreadId("Before");
var res = await HeavyJob().ConfigureAwait(false);
Helper.PrintThreadId("After");
}
class Helper
{
private static int index = 1;
public static void PrintThreadId(string message = null, [CallerMemberName] string name = null)
{
var title = $"{index}: {name}";
if (!string.IsNullOrEmpty(message))
title += $" @ {message}";
Debug.WriteLine("Thread ID: " + Environment.CurrentManagedThreadId + ", title: " + title);
Interlocked.Increment(ref index);
}
}
[img]https:/ /i.sstatic.net/O4Of3M18.png[/img]
для wpf результат:

Мой вопрос — третья строка из двух результатов. почему эти двое ведут себя по-разному? Насколько я понимаю, идентификатор потока в третьей и четвертой строке должен быть одинаковым.
Надеюсь, кто-нибудь сможет объяснить этот вопрос. Спасибо.
Подробнее здесь: https://stackoverflow.com/questions/792 ... ifferently
Мобильная версия