C#异步Task <string>结果作为System.Threading.Tasks.Task 1 [System.String]

时间:2019-06-30 01:46:53

标签: c#

我试图返回一个链接结果以从另一个类获取,但不太了解Task <>。 我试图从中获取结果的地方是另一个班级

在网上寻找答案,但是除了我发现Task可能有用之外,并没有发现任何有用的东西,这是我目前的阶段,现在是凌晨2:40,我很困惑

    public static async Task<string> ImgurUpload()
    {
        ImgurImage streamImage = null;
        using (MemoryStream ms = new MemoryStream(File.ReadAllBytes("test.png")))
        {
            streamImage = await AO023ASD.UploadImageAnonymous(ms, "1", "2", "3");
        }
        return streamImage.Link;
    }

我希望看到网址的输出:例如www.urlresult.com/123123.png,但实际输出是System.Threading.Tasks.Task1 [System.String]

1 个答案:

答案 0 :(得分:0)

您的函数返回一个Task<String>。如果要输出Task,则需要等待Task完成,然后从对象获取结果。可能看起来像:

var task = ImgurUpload();
task.Wait();
Console.WriteLine(task.Result);

如果您的调用方法也是async,则您可能更喜欢await task-这样,您的调用方法也将暂停其执行,直到Task完成并将控制权交还给它的调用者。 await自动返回任务的结果。

var task = ImgurUpload();
Console.WriteLine(await task);

或者,如果您实际上不需要异步方法,则可以立即等待图像上传的结果并使方法保持同步:

public static string ImgurUpload()
{
    ImgurImage streamImage = null;
    using (MemoryStream ms = new MemoryStream(File.ReadAllBytes("test.png")))
    {
        streamImage = AO023ASD.UploadImageAnonymous(ms, "1", "2", "3")
                              .GetAwaiter().GetResult(); //This gives the same result as using
                                                         //.Wait() and .Result, but in one line
    }
    return streamImage.Link;
}