设置:我有一个包含一些 PCL 的代码库,其中一个 PCL 是一组调用我的 WCF 数据服务的数据访问类。我利用 Task.Factory.FromAsync 来管理调用 WCF 数据服务的 beginExecute/endExecute。然后我等待结果并将数据发送到应用程序。我首先创建了一个 Win Store 应用程序,一切都很好。现在我正在创建一个win phone 8 UI。现在我遇到了障碍。在等待由 Task.Factory.FromAsync 方法创建的任务的行上,障碍似乎是一个例外。更复杂的是,如果我第一次安装并运行该应用程序,则不会发生异常。我第二次打开应用程序时抛出错误。所以我' 我真的很困惑为什么第二次运行会导致错误,因为所有相同的逻辑都被遵循。我得到的异常不是来自我的代码中的任何内容,而是来自 .NET 库本身。我尝试了其他一些方法来尝试解决这个神秘的问题。我创建了一个 Task.Delay() 任务并且该行没有问题,但是当我对其任务调用 await 时,我得到了完全相同的错误。我试图只获取 Task.Result 而不是等待它,并且从未返回结果,因此应用程序只是挂起(并且也从未引发异常)。Delay() 任务并且该行没有问题,但是当我对其任务调用 await 时,我得到了完全相同的错误。我试图只获取 Task.Result 而不是等待它,并且从未返回结果,因此应用程序只是挂起(并且也从未引发异常)。Delay() 任务并且该行没有问题,但是当我对其任务调用 await 时,我得到了完全相同的错误。我试图只获取 Task.Result 而不是等待它,并且从未返回结果,因此应用程序只是挂起(并且也从未引发异常)。
我在我的 WinRT 应用程序中没有遇到任何问题,所以我猜我的所有逻辑都是合理的,不应该有任何奇怪的线程问题等。
例外:
mscorlib.ni.dll 中发生了“System.Reflection.TargetInvocationException”类型的第一次机会异常当我收到此异常时,我还在 Visual Studio 中看到一个选项卡,上面写着“源代码不可用”。这对我来说很有意义,但这个例外并不能帮助我解决所有问题,我无法获得更多细节。我似乎找不到内部异常(如果有的话)来获取更多细节。
编码:
var retMasterDataEntryInfos = new List<Model.MasterData.MasterDataEntryInfo>();
try
{
var task = Task.Factory.FromAsync(_entities.MasterDataEntryInfoes.BeginExecute,
(result) => _entities.MasterDataEntryInfoes.EndExecute(result),
null);
return await task.ContinueWith((result) =>
{
string a = string.Empty;
if (result != null && result.Result != null && result.Exception == null)
{
foreach (var r in result.Result)
{
var newMDEI = new Model.MasterData.MasterDataEntryInfo()
{
Id = r.Id,
KeyName = r.KeyName,
Name = r.Name,
LastUpdated = r.LastUpdated
};
newMDEI.DatabaseCreationCleanup();
retMasterDataEntryInfos.Add(newMDEI);
}
}
return retMasterDataEntryInfos;
});
}
catch (Exception ex)
{
string a = string.Empty;
}
return retMasterDataEntryInfos;
错误发生在“return await task.ContinueWith((result) =>”这一行。如您所见,我添加了一个 try/catch,这甚至无助于解决问题,因为从未调用过 catch 块.
任何建议都将不胜感激,包括问题的解决方案或调试帮助以获得更好的异常细节。我刚刚绞尽脑汁想弄清楚这一点,但我做不到了。这真的很令人沮丧,因为我希望所有的辛勤工作都可以通过 WinRT 应用程序完成,而现在我需要做的就是在 windows phone 8 上创建一个快速简单的 UI。我希望给我的老板一个甜蜜的惊喜,说你想要一个 WinRT 应用程序,但我们能够重用我们的所有代码,并轻松获得两个平台,而额外的工作最少。非常感谢您的帮助,谢谢!