いろいろあって非同期にできないメソッドから非同期メソッドを呼び出す必要があって、単純に Task.Wait()
したらスレッドがデッドロックした。解決するためには?
呼び出される方
public class BarModel{
public int Id {get; set;}
public string Name {get; set;}
}
public class FooService{
public async Task<BarModel> GetBarAsync(){
// ... ここで ToListAsync()とかやる
}
}
呼び出す方
public class Program{
public static void Main(){
var service = new FooService();
var model = Task.Run(()=>{
return service.GetBarAsync();
}).GetAwaiter().GetResult();
}
}
呼び出しを Task.Run()
で囲み、 GetAwaiter().GetResult()
とする。
正しいかな?