Код C #, использующий асинхронную CTP и генерирующий исключение InvalidOperationException «Task_Start_NullAction» - PullRequest
2 голосов
/ 08 января 2012

Я вызываю QueryJourneys, который выполняет асинхронный вызов d2, но затем не удается при попытке загрузить некоторый контент (XML) с помощью WebClient, также асинхронно.

Я получаю исключение 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;

1 Ответ

4 голосов
/ 08 января 2012

Проблема в звонке на 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.)

...