2015-04-01 3 views
-1

Я изучаю асинхронное программирование, я не уверен, что я иду в правильном направлении. Я хочу вызвать несколько методов async, но из того, что я прочитал, asyn должен начинаться с верхнего уровня, до нижнего уровня. Но на верхнем уровне, когда я делаю метод asyn, жалоба компилятора не может ждать строки.asyn пример вызова нескольких методов

public static async void Method() 
    { 
     var classdemoAsyn = new DemoAsyn(); 
     var t = await classdemoAsyn.DoSomeImportantWork("Start ").Result; 
    } 

public class DemoAsyn 
{ 
    public async Task<string> DoSomeImportantWork(string strDoSomeWork) 
    { 
     strDoSomeWork = strDoSomeWork + " (1) Enter => so some important work"; 
     Console.WriteLine("**********Enter => so some important work******"); 
     var t = await SomeComplexOperation(strDoSomeWork); 
     Console.WriteLine("***********End Do some important work***********"); 
     return t; 
    } 

    public Task<string> SomeComplexOperation(string StrDoSomeComplexWork) 
    { 
     string str =StrDoSomeComplexWork + "Enter => very very complex work"; 
     Console.WriteLine(str); 
     return Task.Factory.StartNew(() => {return str; }); 
    } 

} 
+0

Какое приложение это (UI или ASP.NET)? Кроме того, ваша «работа» связана с процессором или вводом/выводом? –

+2

Вы получаете ошибку компилятора, потому что вы «ожидаете» результата «Задача», а не самой задачи. Удалите '.Result', и эта ошибка должна исчезнуть, хотя есть и другие проблемы с вашим кодом. –

+0

это небольшое консольное приложение, @StephenCleary. Я просто начинаю изучать async все, что хочу достичь, написать несколько методов asyn start от верхнего уровня до нижнего уровня. – Milas

ответ

0

ошибка, вы получаете, потому что вы используете как.Result и await в то же время (как уже было отмечено, Даниэль Келли).

Обычный простой подход к использованию async в консольных приложениях иметь метод верхнего уровня async Task и синхронно ждать на него в методе Main() (это довольно много единственное место, где Wait() или Result имеют смысл в async- с помощью кода), например:

void Main() 
{ 
    MainAsync().Wait(); 
} 

Другим вариантом было бы использовать Stephen Cleary's AsyncContext.Run().

Смежные вопросы