2017-07-27 13 views
-1

残念ながら、私はC#Razor Webフォーム(MVCではない)Webアプリケーションを扱っています。C#Razor Task <string> async not working

以下

二つの機能は、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>機能にアクセスしようとしましたが、私はstring値にTask<string>を変換することはできません。

+0

これは非常に広い質問です。あなたは 'showData'メソッドをどう呼ぶつもりですか? AJAXを使用して、または別のアクションから呼び出すことができます。 'TextBox1.Text'を削除して再利用できるようにする必要があります。詳細を提供する必要があります。 – CodingYoshi

+0

はい...「TextBox1.Text」を削除する必要があることを明確に述べています。問題は 'void'メソッドを呼び出して文字列を取得できないことです。そうですね、このコードでは...私はAJAXを使うことはできません。 – bagofmilk

+0

私はあなたが必要とする詳細については混乱しています。私は単に、2つの関数から 'xml'という文字列を取得しようとしています。私のポストを完全に読んでから、詳細が必要だと私に伝えてください。 – bagofmilk

答えて

0

async void is difficult to work withで始まり、even more so on ASP.NETとする。ちょうど限り、あなたはasync voidを避けるように、あなたが同じ場所に取得します -

私はvoid関数をバイパスし、

それともはasync void showDataasync Task showDataには変更タスク機能にアクセスしようとしました。

ただし、タスクを文字列値に変換することはできません。

あなたはawaitでこれを行う:

var xml = await WaitAsynchronouslyAsync(gID); 

か:

await showData(gID); 

あなたの呼び出し元の関数がasyncをマークし、Task/Task<T>返却する必要があります。はい、これにより、コードベースでasync/awaitが「成長」します。はい、これは通常であり、必要です。