Есть вот такой код. Вопрос: как в Main достать значение heart из ExampleTask()?
namespace ConsoleApplication19
{
class Program
{
static void Main(string[] args)
{
}
}
class Example
{
public async Task<string> ExampleTask()
{
UrbanService client = new UrbanService();
var data = await client.Data("Mom");
var heart = data.List[0].Definition;
return heart;
}
}
}
Вы можете использовать оператор await для того чтобы дождавшись окончания асинхронной операции, получить возвращаемое ею значение.
string hart = await example.ExampleTask();
Имейте в виду, однако, три вещи.
private async void MyMethod {
Весь код, который идет после строчки с оператором await выполняется асинхронно. То есть, выполнение метода MyMethod закончится на той строчке, на которой стоит оператор await, и управление будет передано в метод его вызывающий. Код, который вы напишете после оператора await, и который будет использовать переменную hart, выполнится только тогда, когда Task завершится.
Если метод Main не будет ожидать окончания задачи, то приложение завершится. В этом случае код после await может никогда не выполнится. Чтобы этого избежать, необходимо каким-то образом остановить выполнение метода Main. В этом случае, вам не подойдет решение с использованием оператора await. Придется дождаться окончания выполнения Task с помощью метода Wait.
Task<string> task = example.ExampleTask();
task.Wait();
string hart = task.Result;
Второй нюанс зачастую не приводит к проблемам, но все равно о нем следует помнить. И если ваш код как-то не так работает, попробуйте проанализировать как он будет выполняться учитывая этот второй нюанс. Скорее всего, после этого сразу станет понятно как исправить код.
Третий нюанс не возник бы в приложении, в котором запущен UI поток (WinForms, WPF), потому что такие приложения продолжают функционировать даже после того, как ваш код прекратил выполняться.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости