Вы можете смешивать как async / await, так и работать в фоновом потоке. Async / Await никак не влияет на фоновый поток. Но, пожалуйста, помните, что под async / await задействованы Task (и конечный автомат).
Интересный факт - когда вы декомпилируете код async / await -> там нет async / await; ) Можно сказать, что это синтаксис suger.
Дополнительная информация о том, как это организовано - например, здесь: https://ranjeet.dev/understanding-how-async-state-machine-works/
Так может случиться, что когда вы возвращаетесь из операции asyn c (например, вы начнете получать ответ от HTTP-запроса) - возможно, вы окажетесь в другом потоке, а остальная часть кода будет обработана в другом потоке. Обычно это не проблема, но иногда это имеет значение (например, на ASP. NET - httpcontext может быть потерян из-за этого)
Вы также спросили: «Как мне структурировать код? "И в этом прелесть async / await. Вы не делаете :) Все, что вам нужно изменить, это изменить все на async / await - потому что правило: «Asyn c all way» очень важно »Подробнее о важных правилах асинхронного программирования здесь: https://docs.microsoft.com/en-us/archive/msdn-magazine/2013/march/async-await-best-practices-in-asynchronous-programming
Так, например, если у вас был такой код:
public string SendHttpRequest()
{
using (var client = new WebClient())
{
return client.DownloadString(new Uri("http://www.example.com/example.aspx"));
}
}
, вам просто нужно будет изменить его на:
public async Task<string> SendHttpRequestAsync()
{
using (var client = new WebClient())
{
return await client.DownloadStringTaskAsync("http://www.example.com/example.aspx");
}
}
И затем, конечно, каждое место в коде - вам нужно изменить на asyn c (и вы должны вызвать этот метод и все методы, которые станут asyn c с await). Это правило «asyn c полностью "Не go соблазняйтесь использовать это где-нибудь в коде:
SendHttpRequestAsync().Result --> beacause it saves you from adding async on the method;)
Тогда вы упускаете смысл использования асинхронных функций, и действительно могут произойти какие-то постельные вещи (попробуйте сделать что-нибудь вот так в Winforms с каким-то событием OnClick
:))