Самый простой вариант будет ввести задержку в ваш метод асинхронной:
private static async void StartDoingNothingAsync()
{
await Task.Delay(1000);
// This will be called on a thread-pool thread
Console.WriteLine("leaved");
}
Это не гарантии что test
будут опубликованы до leaved
, но это, кажется, весьма вероятно, будет. Если вы действительно хотите получить гарантию, вам нужно будет что-то передать в StartDoingNothingAsync
, после чего вы сообщите после печать test
... но не совсем ясно, чего вы пытаетесь достичь.
Обратите внимание, что методы асинхронизации должны быть почти никогда be void
- в основном это доступно только для обработчиков событий async. Сделайте вместо этого метод return Task
- таким образом ваш код вызова может узнать, когда он будет завершен. (Даже если вы не использовать тот факт, в данном случае, это хорошая привычка.)
Теперь, когда мы имеем немного больше информации о том, что вы пытаетесь достичь, я бы рекомендовал не делает StartDoingNothingAsync
метод асинхронной - просто использовать задачу вместо:
private static void Main(string[] args)
{
Task task = Task.Run(DoSomething);
Console.WriteLine("test");
task.Wait();
Console.Read();
}
static void DoSomething()
{
// Code to run on a separate thread
}
С этим я добьюсь, что метод «StartDoing ...» полностью асинхронный. В этом методе я сделаю несколько сотрудников, которые занимают много времени, например, пишут большой файл. Код в основной функции должен выполняться в потоке, а «StartDoing ...» должен выполняться в другом потоке. Я сокращу код блокировки в основной функции –
@MarcelHoffmann: Если вы просто хотите начать отдельную задачу, используйте 'Task.Run'. Использование 'async' * будет * использовать поток потока пула (в случае tihs), но только после первого' ожидания ', который должен планировать продолжение. Использование 'Task.Run' было бы намного яснее. –
Спасибо за tipp с задачей. На самом деле у меня есть один вопрос. В чем разница между задачами и async/await и где я должен их использовать? Спасибо за ответ ранее. –