2012-03-02 1 views
1

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

Я получаю ошибки: любые идеи почему?

Ошибка 1 - Недопустимый декларация маркер 'недействительными' в классе, структуре или элемента интерфейса

Ошибка 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; 
    } 
} 
+0

Я предполагаю, что вы имеете в виду, что используете VS11 для ключевых слов async/await. Не уверен, что это будет иметь большое значение, но попробуйте новый Task.Factory.StartNew. Также попробуйте добавить .Result после команды Run. Образец .Result - это возвращаемый тип задач, в этом случае int – Jon

+1

Проверьте, есть ли папка Async CTP в разделе «Мои документы». Было много проблем с установкой async CTP [обсуждалось на форумах] (http://social.msdn.microsoft.com/Forums/en-US/async/threads). Это сводится к тому, что асинхронный CTP является внеполосным обновлением, которое мешает другим обновлениям VS. На данный момент (с VS11 неминуемым) я думаю, что вряд ли они исправят установщик. Как только VS11 будет выпущен, я ожидаю, что Async CTP будет вытащен и больше не доступен. –

ответ

0

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

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

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

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

4

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

+1

Зачем использовать async CTP, когда бета-версия VS11 теперь доступна и, по-видимому, не повлияет на установку VS10? –

+0

@JonSkeet Без Async CTP требуется .NET 4.5 во время выполнения, правильно? Это не обязательно плохо, но что-то нужно иметь в виду. – hvd

+0

Я бы лично не использовал Async CTP для производства на данный момент - слишком много gotchas. Я бы определенно просто работал с бета-версией. –

Смежные вопросы