2017-07-27 44 views
-1

因此,不幸的是我正在處理C#Razor Web表單(非MVC)Web應用程序。C#剃刀任務<string>異步不起作用

我得到了一類C#程序組成的,我需要做一個CSHTML頁面上工作異步功能,我無法弄清楚如何...

兩個函數下面是從C#類與C#Forms應用程序配合良好。 (請注意,「TextBox1」分配了文本)。

我的問題是我需要的字符串變量「XML」要顯示的CSHTML頁面(最好在「文本區域」元素)上,我似乎無法調用showData()函數來檢索值

任何人都可以幫忙嗎?

public static async void showData(string gID) 
{ 
    string xml = ""; 
    try 
    { 
     xml = await WaitAsynchronouslyAsync(gID); 
     //The original code set a TEXTBOX to the string value 
     //I need to revise this code so that I can display it on a cshtml page 
     TextBox1.Text = xml; 

    } 
    catch (HttpRequestException) 
    { 
     throw new ApplicationException("Could not connect to the server"); 
    }  
} 


public static async Task<string> WaitAsynchronouslyAsync(string gID) 
{ 
    await Task.Delay(10); 
    urlLink = "*** A custom Intranet URL ***"; 
    .... 
    .... 
    ** preparing a Token/Client response url ** 
    .... 
    .... 
    string result = await serviceClient.GetStringAsync(urlLink); 
    return result; 
} 

我試圖繞過void功能和訪問Task<string>功能,但我不能轉換Task<string>string值。

+0

這是一個非常寬泛的問題。你打算怎麼調用'showData'方法?您可以使用AJAX或其他操作調用它。您需要刪除'TextBox1.Text',以便它可以重複使用。你需要提供更多的細節。 – CodingYoshi

+0

是的......我清楚地說明需要刪除多個「TextBox1.Text」。問題是你不能調用'void'方法並檢索一個字符串。所以不,用這個代碼..我不能只使用AJAX。 – bagofmilk

+0

我很困惑你需要更多的細節。我只是試圖從兩個函數中檢索字符串'xml'。在告訴我你需要更多細節之前,請完整閱讀我的文章。 – bagofmilk

回答

0

async void is difficult to work with開始,和even more so on ASP.NET

我試圖繞過無效的功能和訪問任務功能

或者只是改變async void showDataasync Task showData - 只要你將你避免async void,你會得到相同的地方。

但我無法將任務轉換爲字符串值。

爲此,您可以await

var xml = await WaitAsynchronouslyAsync(gID); 

或:

await showData(gID); 

您的通話功能需要被打上async並返回Task/Task<T>。是的,這確實會導致async/await「通過您的代碼庫」增長「,是的,這是正常的和必要的。