2016-06-24 12 views
-2

Webサービス(WSDL)といくつかのvoid非同期メソッド(私はタスクを返すように変更できません)を使用して、より長い要求を呼び出します。void非同期メソッドからの戻り値を取得

このメソッドからどのように結果値を取得できますか?

Webサービスでは、EventHandler、EventArgs(私はEventHandleデリゲートで使用する必要があります)があります。

それで基本的な質問ですが、結果を得るためにこれらのことをどのように手がかりにすることができますか?

私は今まで、これを持っている:

//Methods signatures 
getSomethingCompletedEventArgs(object[] results, Exception, bool, object userState) 
getSomethingCompletedHandler(object sender, Service.getSomethingCompletedEventArgs) 

//Didn't build 
Service srv = new Service() 
srv.getSomethingCompleted += new getSomethingCompletedEventHandler(srv.getSomethingAsync); 

//Other try 
var args = new getSomethingCompletedEventArgs(null, new Exception(), false, ""); 
//Didn't build too (Method name expected)  
srv.getSomethingCompleted += new getSomethingCompletedEventHandler(args); 


//This built, but I don't know how to get the results 
public async static void GetSomething() 
{ 
    await Task.Run(() => srv.getSomethingAsync(arg1,arg2,arg3)); 
} 
+3

'void'メソッドには戻り値がありません。あなたはそれらからどのように得ることができると思いますか? – DavidG

+0

あなたのアプリが実際にやっていることに関する周囲の情報が大量になくても、あなたの質問を理解することさえ困難です。非同期要求を行う場合は、最終的に成功または失敗を示す「イベント」を受け取る「コールバック」を指定する必要があります。上記の "Other try"と表記されたさまざまなコードでは、あなたが正しい方向に多かれ少なかれ絡み合っているように見えますが、まだそれほど正しかったわけではなく、あまりにもあまりにもあきらめていますすぐに。 –

+0

DavidG、リクエストを*発行*する呼び出しは実際には 'void'である可能性があります。なぜなら* they *は値を返さないからです。予想される事象の1つが発生したときに、未知の将来のある瞬間に、「返される」ような値が提供される。値は、イベントとともに、それらのハンドラに提供されるデータの一部になります。 –

答えて

0

だから、私は私のコールバックを実装し、それを委任するための方法がありませんでした。

Service srv = new Service(); 

src.getSomethingCompleted += returnMethod; 

Task.Run(() => srv.getSomethingAsync(arg1, arg2, arg3)); 

private static void returnMethod(object sender, getSomethingCompletedEventArgs e) 
{ 
    var result = e.Result.items.ToList(); 
} 

getSomethingAsyncがCompletedステータスを受け取ると、リターンメソッドが呼び出されます。