Почему InvalidCastException при ожидании метода возврата задачи?C#

Место общения программистов C#
Ответить
Anonymous
 Почему InvalidCastException при ожидании метода возврата задачи?

Сообщение Anonymous »

(Настоящий заголовок вопроса должен быть таким: «Почему я получаю сообщение «Невозможно привести объект типа 'System.Runtime.CompilerServices.TaskAwaiter'1[System.Runtime.CompilerServices.VoidTaskResult]» к типу «System. Runtime.CompilerServices.INotifyCompletion'", но, к сожалению, это слишком долго для StackOverflow. :)

Привет,

У меня возникают действительно странные проблемы при попытке дождаться выполнения моего метода. Вызывающий код выглядит следующим образом (отрывок):

Код: Выделить всё

    private async Task DownloadAddonFileAsync(dynamic addon, dynamic file, string targetFolder)
{
// ...
await DownloadFileAsync(file, targetFolder, uri);
DownloadFileAsync выглядит следующим образом:

Код: Выделить всё

    protected async Task DownloadFileAsync(dynamic file, string targetFolder, string uri)
{
// ...
var fileBytes = await AppLoaderRestClient.GetAsync(uri);
AppLoader RestClient.GetAsync(), в свою очередь, выглядит так:

Код: Выделить всё

    public static async Task GetAsync(string uri)
{
// ...
if (typeof (T) == typeof (byte[]))
{
var result = await webClient.DownloadDataTaskAsync(uri);
return (T) (object) result;
}
Итак, на самом деле здесь существует цепочка задач — «внутренняя» задача будет задачей, которая затем будет распространяться до вызывающего абонента и преобразуется в задачу (т. е. задачу без результата). Я предполагаю, что это может быть причиной проблемы?

Если я изменю самый внешний код на этот:

Код: Выделить всё

        var task = DownloadFileAsync(file, targetFolder, uri);
task.Wait();
...работает безупречно. Почему?

Подробнее здесь: https://stackoverflow.com/questions/191 ... ing-method
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»