私は、ローカルテキストファイルからデータをいくつか格納して取得しようとしているUWPアプリケーションを持っていますが、アプリケーションをデッドロックする方法は問わないものです。同期が必要なため、私はタスクを使用してその完了を待ちますが、アプリケーションはロックします。このデッドロックを解決するにはどうすればいいですか?
私は、「メインページ」と呼ばれる自分のUWPアプリケーションのページを持っており、それのコンストラクタで、私は次のコードを持っている:
var listenkeyViewModel = new ListenkeyViewModel();
listenkeyViewModel.GetKey();
listenkey = listenkeyViewModel.Listenkey;
それはViewModelににメソッドを呼び出すためのgetキーがここでの問題です(私は、コール同期はできるだけ早く望ましいだろう作ると思ったので、私は、同期であることを作成しました。
public void GetKey()
{
try
{
var listenKeyTask = RetrieveListenKey();
_listenkey = listenKeyTask.Result;
}
catch (Exception e)
{
}
}
public static async Task<string> RetrieveListenKey()
{
try
{
var storageFolder = Windows.Storage.ApplicationData.Current.LocalFolder;
var listenkeyFile = await storageFolder.GetFileAsync("listenkey.txt");
return await Windows.Storage.FileIO.ReadTextAsync(listenkeyFile);
}
catch (Exception e)
{
throw new Exception("Could not load file");
}
}
を私はコンストラクタをすることはできません。私は事は、「すべての方法ダウン非同期(async)」である知っているが、これは、ここでは不可能です元のコードは非同期であるデッドロックを起こさないはずですか?分かりません。
コードをコンストラクタから移動します。 'InitializeAsync'などの非同期メソッドに入れます。それが最善の解決策です。 –