私は、このような int 以外のタイプ Task でデータを返す方法を理解しようとしていますTask<Dictionary<string, string>>
。
私が見つけたように見えるすべての例は、Task<int>
. と言うだけで簡単にできますreturn 42;
。
私が書こうとしている関数は、次のように機能します。
Task<Dictionary<string, string>> getDamaged()
{
Task<Dictionary<string, string>> d = new Task<Dictionary<string, string>>();
Dictionary<string, string> e = new Dictionary<string, string>();
foreach (Building i in buildingArray)
{
if (Convert.ToInt32(i.efficiency) < 100)
{
e.Add(i.buildingID, i.buildingName);
//d.Add(i.buildingID, i.buildingName); // this does not work, either
}
}
やや有望に見えるTask.FromResult メソッドを見つけましたが、さらに調査するとTResult
、完了したタスクとして、必ずしもあなたができるタスクのようには聞こえないことがわかりますawait
。
これを正しく機能させる方法についてのアイデアはありますか?
アップデート
このメソッドのポイントは、UI スレッドから作業をオフロードして、UI の応答性を維持しようとしていることです。これは、Visual Studio 2012 と .net4.5 を使用して実際にこれを行う最初の試みの 1 つです。上記のコードは、私が記憶から書いたものです。私が試みた実際のコードと、コメントアウトされた失敗した試みを投稿します。
私を本当に悩ませている部分の 1 つは、戻り値の型がタスクの場合に int を返すと、辞書を使用しようとすると、暗黙的に辞書をタスクに変換できないというエラーが表示されることです。
private Task<Dictionary<string, string>> GetDamagedBuildings()
{
//Task<Dictionary<string, string>> damagedBuildings = new Task<Dictionary<string,string>>();
Dictionary<string, string> d = new Dictionary<string, string>();
foreach (ButtonPlanetMap i in buttonArray)
{
//Dictionary<string, string> d = new Dictionary<string,string>();
if (Convert.ToInt32(i.efficiency) < 100)
{
d.Add(i.buildingID.ToString(), i.buildingName);
//(Dictionary<string, string>)damagedBuildings.
}
}
//damagedBuildings = Cast d;
//return damagedBuildings;
return d;
}