2016-07-30 9 views
-1

私はasync/awaitを理解するのに苦労しています。私はクラスAとクラスBを持っていると言うことができます。クラスAは、wcfサービスメソッドからActionResultを返します。その前に、awaitを使って別のクラスから非同期メソッドを呼び出します。これは、obj.method(param1)が非同期に実行され、実行の完了を待つことなく、wcfserviceメソッドが実行されることを意味しますか?それが完了するまで待つか?async/awaitを使用した非同期プログラミング

somemethod()は、クラスBのメソッドの結果を待たずに実行を継続したかったのです。どのように私はこれを達成することができますか?

public async classA 
{ 
    public async IHttpActionResult somemethod 
    { 
     classB obj = new classB(); 
     await obj.method(param1); 
     returnok(somewcfservice.method()); 
    } 

public classB 
{ 
    public async Task method(param) 
    { 
     obj.somebuiltinmethod(param) 
    } 
} 
+1

コードが有効ではありません。 'somemethod()'はそれ自身が 'async'なしで' await'を使うことはできません。問題は非常に広いです。スタックオーバーフローはチュートリアルサイトではありません。言語機能を研究する必要があります。まだ質問がある場合は、_specific_して、あなたがすでに行った研究について説明してください。待たずに 'somemethod()'を正常に終了させたい場合は、待たずに(つまり 'await'を使わないでください)。 –

答えて

-1

1.(PARAM1)をobj.method待つこの平均はwcfserviceメソッドが実行され、aysnchronouslyとその実行の完了を待たずに実行されていますでしょうか?それが完了するまで待つか?

await obj.method(param1);は、実行フローを再開する前にobj.methodが実行を終了するまで待機します。 Thiはobj.method(param1)を意味します。が終了し、Webサービスメソッドが呼び出されます。

2. somemethod()は、クラスBのメソッドの結果を待たずに実行を継続したかったと思います。どのように私はこれを達成することができますか?

あなたはこのような何かを行うことができます:あなたが投稿

var task = obj.method(param1); 
var result = somewcfservice.method() 
Task.WaitAll(task); 
returnok(result); 
+0

_ "obj.method(param1)を待つ; obj.methodが終了するまで待つ" _いいえ、それはしません。 'somemethod()'は 'async'メソッドではないので、単にコンパイルに失敗します。 _ "あなたはこのようなことをすることができます:" _ - いいえ、それは彼が求めているようなものです。あなたの例は、タスクが完了するまでスレッドをブロックします。彼は具体的には 'somemethod()'メソッドを実行し続ける(そして恐らく戻る)_ "**待たずに" _(彼の言葉)を要求した。 –

+0

@PeterDunihoコードがコンパイルされないことに同意しますが、すぐに実現すると思います。まあ、ただタスクを作成し、実行するのを待っていない私の想像力を超えています! –

関連する問題