如何调用异步方法

本文关键字:异步方法 调用 何调用 | 更新日期: 2023-09-27 18:16:05

我不熟悉。net中的线程。

我有一个同步方法MyTest:

public async Task MyTest() {
    using (HttpClient httpClient = new HttpClient()) {
        httpClient.BaseAddress = new Uri(_uri);
        var response = await httpClient.GetAsync("API/GetData");
        if(response!=null && response.IsSuccessStatusCode) {
            var json = await response.Content.ReadAsStringAsync();
            return JsonConvert.DeserializeObject<Dictionary<string, string>>(json);
        }
    }
}

我遇到的问题是调用方法来获取结果(字典)。

当我遍历我的代码时,我看到IsCompleted在我的rest调用返回结果之前完成。

在这种情况下如何正确使用线程?

调用async方法的方法。

public void GetTestData()
{
    try
    {                
        ARestService rest = new ARestService();
        Task tsk = new Task(rest.MyTest);
        if (tsk.IsCompleted)
        {
            var tst = "Done?";
        }
    }
    catch(Exception ex)
    {
        string a = ex.Message;
    }
}

如何调用异步方法

如果您可以将GetTestData方法转换为async方法,只需执行以下操作。

public async Task GetTestData()
{
    try
    {                
        ARestService rest = new ARestService();
        await rest.MyTest();
        var tst = "Done?";
    }
    catch(Exception ex)
    {
        string a = ex.Message;
    }
}

你还应该定义你的方法返回一个Task<Dictionary<string, string>>来接收你的rest服务调用的结果,使用下面的语句。

Dictionary<string, string> dict = await rest.MyTest();

如果没有,请查看一些变通方法,例如使用GetAwaiter().GetResult(),但正如本问题所解释的那样是.GetAwaiter().GetResult();一般使用安全吗?这可能会导致一些问题,所以最好的选择是让你的调用代码也是异步的。