我有一個簡單的方法,以異步格式工作,但當我嘗試將其更改爲同步格式時,它的行爲就像是死鎖,並且從不返回任何內容。我知道使用異步調用會更有效,但我很好奇爲什麼會發生這種情況。提前致謝。同步調用不工作,但異步
這將返回一個工作結果:
public static async Task getCompanyAsync(){
var client = new getRestClient();
var response = await companiesApi.GetCompaniesAsync(client);
var companies = response.GetResultAsync<List<Company>>();
}
這將使程序坐和旋轉,直到我殺了它:
public static void getCompany(){
var client = new getRestClient();
var response = companiesApi.GetCompanies(client);
var companies = response.GetResult<List<Company>>();
}
編輯:
因此,這裏是一些更詳細的代碼。
static void Main(string[] args)
{
MainAsync(args).Wait();
Console.ReadLine();
}
public static async Task MainAsync(string[] args)
{
await getCompanyAsync();
getCompany();
}
private static async Task getCompanyAsync()
{
var client = getApiClient();
var companiesApi = new CompaniesApi(client);
var response = await companiesApi.GetCompaniesAsync();
var companyies = await response.GetResultAsync<List<Company>>();
foreach (var company in companyies)
{
Console.WriteLine(company.Name);
}
}
private static void getCompany()
{
var client = getApiClient();
var companiesApi = new CompaniesApi(client);
var response = companiesApi.GetCompanies();
var companyies = response.GetResult<List<Company>>();
foreach (var company in companyies)
{
Console.WriteLine(company.Name);
}
我應用程序運行如預期,當我提出getCompany();
從MainAsync()
方法進Main()
方法。
這是你正在使用的任何庫的問題。您顯示的代碼不足以查看問題。 – Euphoric
這是在UI還是控制檯應用程序中? (異步在不同環境中的工作方式可能有所不同)。順便提一句,第二個代碼片段甚至不應該編譯,因爲您在非異步方法中使用「await」。 – EJoshuaS
@EJoshuaS在第二個片段中的等待是一個錯字,現在我已經編輯出來了。這在控制檯應用程序中運行。 – Bernie