2017-02-14 6 views
-3

Я хочу, чтобы эта функция возвращает результат:Возврат данных с помощью Task

public Task<Item_DataColl> invoke_command_READ(string UCPTName) 
{ 
    Item_DataColl res = await Task.FromResult(thread_command_READ_result(UCPTName)); 
    return res; 
} 

Я не понимаю, как Task работает и как я могу использовать его, чтобы сделать нить с результатом. Вы можете мне это объяснить?

+0

Краткая версия: вместо 'Task.FromResult (...)', используйте 'Task.Run (() => thread_command_READ_result (UCPTName));'. Обратите внимание, что вам нужно добавить 'async' в ваше объявление' invoke_command_Read() '' '', если вы хотите использовать 'await' в методе. Длинная версия: вам нужно изучить документацию и другие ссылки, которые объясняют, как вы можете использовать параллельную библиотеку задач для выполнения операций в фоновом режиме (которые по умолчанию будут использовать пул потоков для выполнения этих операций в отдельном потоке). –

+1

Если вы дойдете до того момента, когда у вас возник вопрос о том, что _hasn't_ уже был дан более частым раз в Stack Overflow уже и/или который уже надлежащим образом рассмотрен в документации, отправьте новый вопрос, включая хороший [ mcve], и ​​подробное объяснение того, что конкретно возникает у вас, возникают проблемы с пониманием или выяснением. –

+0

Да, я забыл async в объявлении, я удалил его перед публикацией этого сообщения, не знаю почему. Я долгое время работаю над документацией, и если я спрашиваю о стеке, это потому, что я не могу выполнить даже простой возврат задачи. Кстати, я не думаю, что редактирование для добавления или удаления некоторых пробелов - это хорошее редактирование ... –

ответ

1

В вашем конкретном случае, это лучше сделать метод async, например, так:

public async Task<Item_DataColl> invoke_command_READ(string UCPTName) 
{ 
    return await thread_command_READ_result(UCPTName); 
} 

Если, однако, вы хотите вернуть задачу, но НЕ ASync (почему ??), вы можете сделать это :

public Task<Item_DataColl> invoke_command_READ(string UCPTName) 
{ 
    Item_DataColl res = await Task.FromResult(thread_command_READ_result(UCPTName)); 
    return Task.FromResult(res); 
} 

Вы можете думать о Task<T> как обертка для Thread, который будет работать до тех пор, Func передается задаче возвращает результат (или, в случае Task, возвращает управление).

+0

Асинкс был забыт. Однако вчера я пробовал ваше первое, и это не работает. Я не могу узнать, почему эта проблема возникла. Как сейчас, он отлично работает, спасибо –

+0

@NFrb я сделал редактирование, взгляните еще раз. – zaitsman

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