Есть вот такой код. Вопрос: как в 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), потому что такие приложения продолжают функционировать даже после того, как ваш код прекратил выполняться.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Доброго дня! Недавно начал изучать программированиеНачал с Unity3d использую C#
В чём может быть ошибка? Не считает кратчайший путь, как надо