2016-08-04 14 views
0

MySqlサーバーからのデータをクエリしてtxtファイルに書き込む非同期メソッドがあります。 (非同期メソッドから文字列を返す方法が見つかりませんでした)。非同期メソッドと同期メソッドを連続して呼び出します

次に、txtファイルを読み取るシンプルな同期メソッドを呼び出す必要があります。

私のコードは次のようになります。

var sql = new ProjetTN.Class.SQLite(); 
sql.GetSens("101"); //<--- This is an async method 

var SensItems = sql.ListeSens(); //<--- This method return a List<string> 

しかし、私はそのようなコードを実行した場合、非同期メソッドはスキップされ、txtファイルを書き込みません。その後、syncメソッドはtxtファイルを読み込もうとしますが、彼は存在しないので、プログラムはクラッシュします。

public void CallGetSens() 
{ 
    var task = GetSens("101"); 
    task.Wait(); 
} 

私はメソッドを呼び出すとき:

var sql = new ProjetTN.Class.SQLite(); 
sql.CallGetSens(); //<--- This is an async method 

var SensItems = sql.ListeSens(); //<--- This method return a List<string> 

しかし、これだけでフリーズ私の研究では

、私は私が私が試した完全で非同期メソッドを待つ必要があることがわかりましたプログラム...

私はどのように非同期メソッドとその後の同期メソッドを呼び出すことができますか? それ以外の場合、非同期メソッドから文字列を返すにはどうすればよいですか?

+5

それについての詳細な議論を持っている私は、非同期/待つに読んでいくつかをやってお勧めします。 –

+0

@CharlesMagerあなたは私に何の読書を提案していますか? :) –

+0

初心者向け:[asyncとasyncを使った非同期プログラミング](https://msdn.microsoft.com/en-us/library/mt674882.aspx)また、[非同期プログラムの制御フロー](https://msdn.microsoft.com/en-us/library/mt674892.aspx) – Igor

答えて

2

最良の方法は、あなたが非同期呼び出しをawaitことができるように、呼び出しをやっている方法はasync可能にするために、通常は次のとおりです。

async Task MyMethod() 
{ 
    var sql = new ProjetTN.Class.SQLite(); 
    await sql.CallGetSens(); 

    var SensItems = sql.ListeSens(); 
    ... 
} 

それが何らかの理由で動作しません場合は、あなたが.ContinueWith()を使用することができますasync 0123を適用することにより、

var sql = new ProjetTN.Class.SQLite(); 
sql.CallGetSens().ContinueWith(t => { 
    var SensItems = sql.ListeSens(); 
    ... 
}); 
0

はあなたがあなたのasync操作syncを行うことができます。テキストファイルからのデータのロードは、ファイルが保存された後に発生します方法

これlinkも、この2つのstackoverflowの質問に

質問Oneを参照してくださいと質問 Two

関連する問題