簡體   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