异步方法的返回类型必须为 void、Task 或 Task<T>



我这里有以下代码:

public async Dictionary<string, float> GetLikelihoodsAsync(List<string> inputs)
{
    HttpClient client = new HttpClient(); 
    string uri = GetUri();
    string body = GetRequestBody(inputs);
    byte[] requestData = Encoding.UTF8.GetBytes(body);
    Dictionary<string, float> result = await GetResponseAsync(requestData, client, uri)
        .ContinueWith(responseTask => ParseResponseAsync(responseTask.Result))
        .ContinueWith(task => task.Result.Result);
    return result;
}

async Task<HttpResponseMessage> GetResponseAsync(byte[] requestData, HttpClient client, string uri) {...}
async Task<Dictionary<string, float>> ParseResponseAsync(HttpResponseMessage response) {...}

基本上,在GetResponseAsync完成后,我想获取结果并将其提供给ParseResponseAsync并获取包含其结果的任务。

目前,它给出了一个编译器错误,说

异步方法的返回类型必须为 void、Task 或 Task

实现这一目标并摆脱此错误的最佳方法是什么?欢迎其他(更好的解决方案)和一些关于为什么要做任务的解释。结果.结果在最后一个继续也欢迎。

将返回类型更改为 Task<Dictionary<string, float>>

public async Task<Dictionary<string, float>> GetLikelihoodsAsync(List<string> inputs)

您还可以将ContinueWith的用法替换为使用await

var response = await GetResponseAsync(requestData, client, uri);
var result = await ParseResponseAsync(response);
return result;

如错误中所述:

异步方法的返回类型必须为 voidTaskTask<T>

在您的情况下,这将是Task<T>,或者具体来说Task<Dictionary<string, float>>.因此,您的方法需要声明如下:

public async Task<Dictionary<string, float>> GetLikelihoodsAsync(List<string> inputs)

注意你其实并不需要返回Task<T>,你只需要返回T。您可以在此处阅读有关它的更多信息。

最新更新