【问题标题】:C# code utilizing Async CTP and throwing InvalidOperationException "Task_Start_NullAction"C# 代码利用 Async CTP 并抛出 InvalidOperationException "Task_Start_NullAction"
【发布时间】:2012-01-08 17:19:28
【问题描述】:

我调用 QueryJourneys 对 d2 进行异步调用,但尝试使用 WebClient 下载某些内容 (XML) 时失败,也是异步的。

我收到异常 InvalidOperationException,字符串 "Task_Start_NullAction" 作为唯一消息。

怎么了?

调用代码:

    autoCompleteBox.ItemsSource = await OpenAPI.QueryStation(e.Parameter);

抛出异常的代码:

    public static Task<IEnumerable<Journey>> QueryJourneys(
                                                 Point from, 
                                                 Point to, 
                                                 DateTime lastStart)
    {
        string str = cs_requestResultPage(from, to, lastStart);

        Task<IEnumerable<Journey>> t = d2(str);
        t.Start();
        return t;
    }

    private static async Task<IEnumerable<Journey>> d2(string str)
    {
        var webClient = new WebClient();
        webClient.Encoding = Encoding.UTF8;

        string t = await webClient.DownloadStringTaskAsync(new Uri(str));
        var view = new ResultPageView(XDocument.Parse(t));

        return view.Journeys;

【问题讨论】:

    标签: c# .net async-ctp


    【解决方案1】:

    问题是对Task.Start() 的调用。异步方法返回的任务无法显式启动 - 当方法返回时,它已经有效地进行了。可以直接从QueryJourneys方法返回:

    public static Task<IEnumerable<Journey>> QueryJourneys(Point from, Point to,
                                                           DateTime lastStart)
    {
        string str = cs_requestResultPage(from, to, lastStart);
        return d2(str);
    }
    

    顺便说一句,我强烈建议您开始为方法提供更有意义的名称,遵循 .NET 命名约定。

    (另外,值得一提的是,哪个方法抛出了异常——在这种情况下,它可能是Task.Start。)

    【讨论】:

    • 这里抛出了异常。我以为是我写的,但我显然没有。 string t = await webClient.DownloadStringTaskAsync(new Uri(str));
    • @RobertSundström:真的吗?这听起来不太可能——你能包括完整的堆栈跟踪吗?正如我所说,我期望失败的一点是对Task.Start()的调用。
    • 无论如何。谢谢你的回答。我对语法很陌生,有时它会变得复杂。我实际上想知道Task 的发布。没想到await 会自动为我启动它。想知道我为什么这样做。没关系。
    • @RobertSundström:启动它的不是await - 是对DownloadStringTaskAsync 的调用。这会返回一个已经“启动并运行”的任务。
    • 啊哈!我现在看到了不同。好。一切似乎都有效,我得到了结果。希望以后不要惹上麻烦。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-27
    • 2015-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多