Mój kolega znalazł problem z naszym kodem i zajęło trochę czasu, aby znaleźć dokładnie to, co się dzieje, ale najlepiej można to wykazać na podstawie tego prostego przykładu:Zapisywanie na konsoli przy użyciu Task.Run() kończy się niepowodzeniem.
// Fails
class Program
{
static void Main(string[] args)
{
Task.Run(() => Console.WriteLine("Hello World"));
Console.ReadKey();
}
}
// Works fine
class Program
{
static void Main(string[] args)
{
Console.Write(String.Empty);
Task.Run(() => Console.WriteLine("Hello World"));
Console.ReadKey();
}
}
Jest oczywiste, że dzięki temu pisanie na konsolę w dowolnym miejscu z głównego wątku pozwoli również wątkowi tła pisać do konsoli, ale staramy się zrozumieć, dlaczego tak się dzieje. Czy ktoś może wyjaśnić, co pisanie na konsolę z głównego wątku zapewnia, że pierwszy fragment nie działa?
Nie opisano, co dzieje się w przypadku niepowodzenia. Na moim pudełku, wydaje się, że zawiesi się, dopóki nie uderzysz, w którym momencie drukuje. –
@JonSkeet Tak, to jest zachowanie, które widzę – kevinawalker