2015-07-13 4 views
1

У меня есть методMultiple ждать внутри метода асинхронной

public async void getResult() 

Это полагается на 2 ждут ответов внутри него.

Это первая: ждут:

await System.Threading.Tasks.Task.Factory.StartNew (() => { 
        try 
        { 
         scannedItem = getScannedItem(); 
        } 
        catch (Exception exe) 
        { } 

И второй ждут ждут вызова, который использует scannedItem сверху

await System.Threading.Tasks.Task.Factory.StartNew (() => { 
        try 
        { 
         getResultsScannedItem = results(ScannedItem); 
        } 
        catch (Exception exe) 
        { } 

Я хочу, чтобы все это выполнить с помощью одной кнопки. Однако второе ожидание никогда не выполняется. Могу ли я даже иметь два ожидания внутри метода? Немного путайте, как это сделать.

+0

Есть ли причина, по которой вы не можете просто поместить тело второй задачи в первую задачу? то есть. 'waitait Task.Factory.StartNew (() => {try {scannedItem = getScannedItem(); getResultsScannedItem = result (scannedItem);} ...' – clcto

+0

@clcto Я попытался поместить его в первый, но я получаю ошибку : «Оператор« ожидание »может использоваться только тогда, когда его содержащее лямбда-выражение помечено модификатором« async ». – jipot

ответ

11

Да, у вас может быть несколько ожиданий внутри одного метода .. но они не выглядят как ожидаемые задачи .. вы просто завершаете их фабрикой задач.

Вы также, кажется, проглатываете любое исключение, которое, вероятно, происходит внутри кода.

Try изменения в:

await Task.Run(() => scannedItem = getScannedItem()); 

await Task.Run(() => getResultsScannedItem = results(ScannedItem)); 

Шаг через него с помощью отладчика и посмотреть, если его работы или исключение происходит.

+0

Просто вынимая' try' и 'catch', стоит +1 в себе. –

+2

Я бы также добавил примечание о типе возврата void. Вы никогда не должны возвращать void в методе async, за исключением обработчиков событий. 'public async void getResult()' должен стать 'public async Задача getResult()' –

+1

Да .. должно возвращать 'Задача ' – scartag

1
public async void getResult() 
{ 
    ScannedItem scannedItem; 
    try 
    { 
     scannedItem = await getScannedItem(); 
     getResultsScannedItem = await results(scannedItem); 
    } catch (Exception exe) { } 
} 

Вы должны добавить «async» в getScannedItem и функции результатов. Надеюсь, поможет.

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