繁体   English   中英

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

[英]C# async Task<string> result as System.Threading.Tasks.Task 1[System.String]

我正在尝试返回一个链接结果以从另一个类中获取,但不太了解 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;
    }

我期望一个 url 的输出:例如 www.urlresult.com/123123.png 但实际输出是 System.Threading.Tasks.Task1[System.String]

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

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

如果您的调用方法也是async ,您可能更愿意await 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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM