Ошибка с ключевыми словами async await

я добавил AsyncCtpLibrary v.3. взял пример кода с асинхронной веб-страницы. завернули его в TestFixture, чтобы поиграть с ним.

я получаю ошибки: есть идеи, почему?

Ошибка 1. Недопустимый токен «void» в объявлении класса, структуры или члена интерфейса.

Ошибка 2 - ; ожидал

код:

 [TestFixture]
public class AsyncTests
{
    [Test]
    public async void AsyncRunCpu()
    {
        Console.WriteLine("On the UI thread.");

        int result = await TaskEx.Run(
            () =>
                {
                    Console.WriteLine("Starting CPU-intensive work on background thread...");
                    int work = DoCpuIntensiveWork();
                    Console.WriteLine("Done with CPU-intensive work!");
                    return work;
                });

        Console.WriteLine("Back on the UI thread.  Result is {0}.", result);
    }

    public int DoCpuIntensiveWork()
    {
        // Simulate some CPU-bound work on the background thread:
        Thread.Sleep(5000);
        return 123;
    }
}

person CurlyFro    schedule 02.03.2012    source источник
comment
Я предполагаю, что вы имеете в виду, что используете VS11 для ключевых слов async/await. Не уверен, что это будет иметь большое значение, но попробуйте новый Task.Factory.StartNew. Также попробуйте добавить .Result после команды «Выполнить». .Result — это возвращаемый тип Tasks, в данном случае — int.   -  person Jon    schedule 03.03.2012


Ответы (2)


Я думаю, что это должно быть:

[Test]
public async Task AsyncRunCpu()
{
    // ...
}

насколько я могу судить, асинхронные методы с возвращаемым типом void в некотором роде особенные - интересно, почему компилятор не выдает предупреждение для такого сценария...

Кстати, вы можете использовать async/await с .NET4.0, просто добавьте ссылку на Microsoft.BCL .Async в проекте. Единственное отличие состоит в том, что некоторые функции, связанные с Task, находятся в типе TaskEx.

person mfeineis    schedule 17.01.2014

Вы не можете просто добавить .dll в свой проект и заставить его работать: асинхронная CTP расширяет синтаксис языка C#, «обычный» компилятор не понимает новые ключевые слова, даже если присутствует необходимая сборка среды выполнения. Вам нужно установить его с помощью официального установщика. (Примечание: сначала удалите все обновления Visual Studio, начиная с последнего пакета обновлений, иначе установка не завершится успешно. Впоследствии вы сможете переустановить обновления.)

person Community    schedule 02.03.2012
comment
Зачем использовать асинхронную CTP, когда бета-версия VS11 уже доступна и, по-видимому, не повлияет на установку VS10? - person Jon Skeet; 03.03.2012
comment
@JonSkeet Без асинхронной CTP во время выполнения требуется .NET 4.5, верно? Это не обязательно плохо, но об этом нужно помнить. - person ; 03.03.2012
comment
Я бы лично не стал использовать асинхронную CTP для производства в данный момент — слишком много ошибок. Вместо этого я бы определенно просто работал с бета-версией. - person Jon Skeet; 03.03.2012
comment
@JonSkeet Глядя на ваш блог, msmvps.com/blogs/jon_skeet/archive/2011/06/10/ является хорошей причиной избегать CTP, если использование VS11 является вариант вообще - хотя опять же, CTP лучше, чем ничего, когда VS11 не вариант. - person ; 03.03.2012
comment
я использую VS10. я видел эту ссылку codesnack. ком/блог/2012/02/16/. у меня было установлено одно из трех исправлений, и я удалил его, но это не решило мою проблему. затем я попробовал бета-версию VS11, но это дает мне ошибку установки :( - person CurlyFro; 03.03.2012
comment
@CurlyFro Я недостаточно знаю о VS11, чтобы сказать об этом что-то полезное, но что касается CTP, я смог без проблем установить его на разных системах, которые были полностью обновлены перед установкой, сначала удалив шесть исправлений: 2522890, 2529927, 2548139, 2549864, 2565057, 2635973. (Возможно, нужно удалить только некоторые из них.) Если вы нашли только одно, мне интересно, есть ли у вас другие проблемы, которые могут возникнуть у вас. упущен из виду. Я также не уверен, где вы искали: они доступны в «Программы и компоненты» › «Просмотр установленных обновлений», а не непосредственно в «Программы и компоненты». - person ; 03.03.2012
comment
@hvd: Спасибо, вы помогли мне разобраться в загадочной проблеме. Хотел бы я знать это раньше, я бы сэкономил много времени. - person Phil; 27.08.2012