【问题标题】:Windows Phone 7 await inside foreach C# 5.0 AsyncWindows Phone 7 在 foreach C# 5.0 Async 中等待
【发布时间】:2011-12-31 20:32:38
【问题描述】:

我正在使用 C# 异步 CTP 调用一些返回 URI 的远程函数,我有以下代码:

 public async Task<Uri> GetUriAsync(string service, string endpoint)
    {


        Uri result = null;
        foreach (var service in _serviceProvider)
        {
            try
            {

                result = await service .GetAsync(service,endpoint);

                if (result != null)
                    return result;
            }
            catch (Exception)
            {

            }
        }

        return result;

    }

由于foreach里面有await,所以这个方法应该在第一个await中返回,但是通过调试我注意到当代码到达await时会跳转到“return result”

我之前使用过 async ctp(不是在 windows phone 上)并完成了与此类似的代码。

这有什么问题?

编辑:这不是调试器错误/错误,因为远程调用从未完成(我在那里有一个日志)。

【问题讨论】:

    标签: windows-phone-7 async-ctp c#-5.0


    【解决方案1】:

    这并没有错。 CTP 中的调试体验远非完美。它在 VS 11 CTP 中有所改进,但仍不完美。

    在运行时,这应该会产生您期望的结果(返回第一个不为空的结果)。

    【讨论】:

    • 忘了说,返回的值导致我的代码出错。不调用任何服务。 . .
    • @DVD 代码应该立即返回Task&lt;Uri&gt;。在服务调用完成之前,任务不会完成,但是......
    • 正确,但我看到的是函数返回并到达验证结果的位置(如果 uri != null)并且我的日志上没有服务调用
    • Uri imageUri = await ImageController.Instance.GetUriAsync("imageServer", "jpgs"); if(imageUri == null) MessageBox.Show("ERROR");
    • 我现在注意到,在输出选项卡中我得到了这个:AsyncCtpLibrary_Phone.dll 中发生了“System.ObjectDisposedException”类型的第一次机会异常
    【解决方案2】:

    问题是 AsyncCtp dll 的内部异常。调试器似乎将此异常归类为 First Chance 异常,并决定不中止调试会话。通过执行代码正常运行但不执行 Web 请求(在这种情况下),让开发人员认为一切正常。

    感谢@Reed 的帮助。

    【讨论】:

    • 不是调试器对异常进行分类。如果您关闭第一次机会异常通知,您将只收到未捕获异常的通知。
    • 你是对的,我的意思是调试器“忽略”了这个异常,让我没有注意到它们。如果有更多像我这样全屏调试源代码的人,他们会错过这一点,因为调试器会在输出选项卡上通知此异常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多