2

我调用 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;
4

1 回答 1

4

问题是调用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.)

于 2012-01-08T17:32:06.210 回答