等待第二轮应用程序的任务导致异常

时间:2014-03-27 14:13:45

标签: windows-phone-8 async-await wcf-data-services portable-class-library winrt-component

设置: 我有一个代码库,其中包含一些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应用程序,但我们能够重用我们所有的代码,并轻松地获得两个平台,只需要很少的额外工作。非常感谢您的帮助,谢谢!

0 个答案:

没有答案