设置: 我有一个代码库,其中包含一些PCL,其中一个PCL是一组数据访问类,可以调用我的WCF数据服务。我已经利用Task.Factory.FromAsync来管理调用WCF数据服务的beginExecute / endExecute。然后我等待结果并将数据发送到应用程序。我开始时首先创建一个Win Store应用程序,一切都很好。现在我正在创建一个win phone 8 UI。现在我遇到了麻烦。在等待Task.Factory.FromAsync方法创建的任务的行上似乎是一个例外。更复杂的是,如果我第一次安装并运行应用程序,则不会发生异常。第二次打开应用程序时会抛出错误。所以我真的很困惑为什么第二次运行会导致错误,因为所有相同的逻辑都被遵循。我得到的例外不是来自我的代码中的任何东西,但似乎来自.NET库本身。我尝试过其他一些尝试来解决这个神秘的问题。我创建了一个Task.Delay()任务,该行没有问题,但是当我在其任务上调用await时,我得到完全相同的错误。我试图获取Task.Result而不是等待它,结果永远不会返回,因此应用程序只是挂起(并且从未抛出异常)。
我没有在WinRT应用程序中遇到任何问题,因此我猜测我的所有逻辑都是合理的,并且不应该有任何奇怪的线程问题等。
例外:
类型' System.Reflection.TargetInvocationException'的第一次机会异常。发生在mscorlib.ni.dll中 当我得到这个例外时,我还在visual studio中得到一个标签,上面写着" Source Code Not Available"。这对我来说很有意义,但是这个例外并没有帮助我解决所有问题,而且我无法获得更多细节。我似乎无法找到内部异常(如果有的话)来获得更多细节。
代码:
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;
错误发生在&#34;返回await task.ContinueWith((result)=&gt;&#34;。正如您所看到的,我添加了一个try / catch并且没有&#39;甚至有助于控制问题,因为永远不会调用catch块。
任何建议都将受到赞赏,包括问题的解决方案或调试帮助以获得更好的异常细节。我只是捣乱了我的大脑来解决这个问题,并且即将到来。我真的很沮丧,因为我希望所有的努力都是用WinRT应用完成的,现在我需要做的就是在Windows Phone 8上创建一个快速简单的用户界面。我希望能给我的老板一个甜蜜的惊喜说你想要一个WinRT应用程序,但我们能够重用我们所有的代码,并轻松地获得两个平台,只需要很少的额外工作。非常感谢您的帮助,谢谢!