Ответ 1
-
В thr_calc используйте:
return zzztest()
-
Кроме того, убедитесь, что вы установили, что ваш проект использует .Net 4.5 или новее (когда был введен "асинхронный" )
im пытается выполнить некоторую операцию async в некоторой возвращающей строке функции.
async private void button1_Click(object sender, EventArgs e)
{
string output = await thr_calc(this, null);
}
async private Task<string> thr_calc(object sender, EventArgs e)
{
return await zzztest();
}
string zzztest()
{
string asd;
//some stuff here
return asd;
}
Но это дает мне ошибки в каждой строке содержит слова async/await! Я использую русскую версию ms vs express 2012 для рабочего стола Windows, поэтому здесь есть перевод ошибок:
Невозможно найти все типы, требуемые модификатором 'async'. Вы настроили таргетинг на неправильную версию фрейма или не указали ссылку на сборку?
И 2 ошибки:
Предопределенный тип 'System.Runtime.CompilerServices.IAsyncStateMachine' не определен или не импортирован
Я не могу найти эту ссылку. Я пытался использовать async/await before, и он работал нормально, теперь я делаю все то же самое, и его нет. Что мне не хватает?
В thr_calc используйте:
return zzztest()
Кроме того, убедитесь, что вы установили, что ваш проект использует .Net 4.5 или новее (когда был введен "асинхронный" )
В проекте .NET 4.0 я решил "Предопределенный тип". System.Runtime.CompilerServices.IAsyncStateMachine "не определен или не импортирован", установив пакет Microsoft.Bcl.Async из nuget. В диспетчере пакетов VS nuget найдите "bcl" и установите асинхронный вид.
Если zzztest
- это долго работающая операция, вы можете сделать это, чтобы запустить ее в фоновом потоке:
async private Task<string> thr_calc(object sender, EventArgs e)
{
return await Task.Run<string>(() => zzztest());
}
Вышеупомянутые также должны решить ваши ошибки компиляции.
Если zzztest
НЕ долго работает, тогда НЕ используйте await
/async
.