我一直在试图弄清楚如何以 Task 类型返回数据,而不是像这样的 int 类型,例如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 响应。这是我第一次尝试使用带有 .net4.5 的 Visual Studio 2012 来真正尝试做到这一点。上面的代码是我凭记忆写的。我将发布我一直在尝试的实际代码以及注释掉的失败尝试。
真正困扰我的一个部分是,如果我的返回类型是任务,则返回一个 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;
}