2016-11-22 35 views
0

私はWCFサービスの中にメインメソッドを持っています。ちょうど私がAyncとAwaitを置く必要があるところを指摘するのを助けてください。私はmainメソッドの中に2つのメソッドがあり、1つのメソッドはテーブルを更新し、もう1つのメソッドはSQlから値をフェッチし、値をオブジェクトとして戻します.2つのメソッドをParallelで実行します。そして、あなたが消費することができるAsync Awaitの使い方

private async Task UpdateTableAsync(string desc) 
{ 
    ... 
    await db.SaveChangesAsync(); 
} 

private async Task<object> GetObjectValue(string desc) 
{ 
    object objA = await ...; 
    return objA; 
} 

:私は、Entity Frameworkで利用可能な非同期APIを使用して、例えば、すぐにクライアントに

public object GetSensorConfiguration(string desc) 
{ 
    object oObject = null; 
    UpdateTable(desc); 
    oObject = GetobjectValue(desc); 
    return oObject ; 
} 

private void updatetable(string desc) 
{ 
    // no return value.. just update  
} 

private object GetobjectValue(string desc) 
{ 
    object objA = null; 
    //Get values for the objA; 
    return objA; 
} 
+0

は、最初に実行されてupdatetable方法に依存GetobjectValueメソッドですか? – auburg

+0

いいえ更新と取得は別々のプロセスであり、独立しています – Marid

答えて

1

まずオブジェクトを返すようにしたい、あなたのデータベース呼び出しで始まりますあなたの "メイン"の方法でそれら。あなたが同時に(ない「平行」)それらを実行したいので、あなたはTask.WhenAllを使用したいと思います:

public async Task<object> GetSensorConfiguration(string desc) 
{ 
    var updateTask = UpdateTableAsync(desc); 
    var getTask = GetObjectValueAsync(desc); 
    await Task.WhenAll(updateTask, getTask); 
    return await getTask; 
} 
+0

タスクが完了したことがわかると、getTask.Resultを介してgetTaskを待つ利点がありますか? – sellotape

+0

私は自分に答えて、私はそれが保留中の例外を投げると思いますか? – sellotape

+1

@sellotape:どちらも例外をスローしますが、 'await'は予期している例外をスローします。 'Result'はすべての例外を' AggregateException'にラップします。また、 'await'はコードの変更に対してより弾力性があります(例えば、メソッドがリファクタリングされ、タスクが完了しているかどうかなど)。 –