Задача C # передается в качестве параметра другой задаче - PullRequest
0 голосов
/ 23 ноября 2018

Итак, у меня в настоящее время есть такой код:

//THIS IS A PART OF A METHOD
// ...
// Add a logic after the request has finished
(this.cache[RequestType.DeleteReceiver] as Task<Tuple<ServiceResponseCode, bool>>).ContinueWith((receiversDeletionTask) =>
{
     receiversDeletionTask.Wait();

     // Check that response was ok
     if (receiversDeletionTask.Result.Item1 == ServiceResponseCode.Ok && receiversDeletionTask.Result.Item2 == true)
     {
          ReceiverModel deletedReceiver = this.fetchedReceivers.Find(receiver => receiver.Id == id);
          this.fetchedReceivers.Remove(deletedReceiver);
          this.fetchedReceiversIndexes.RemoveAt(this.fetchedReceivers.IndexOf(deletedReceiver));
          foreach (int index in this.fetchedReceiversIndexes)
          {
              this.fetchedReceiversIndexes[index] = index;
          }
      }
});
return await (this.cache[RequestType.DeleteReceiver] as Task<Tuple<ServiceResponseCode, bool>>);

В этой реализации я возвращаю первое задание, и вызывающий абонент начинает работать после того, как первое задание завершается, но я не хочу, чтобы вызывающий ожидалдля задачи ContinueWith.

Итак, я попытался изменить рефакторинг на это:

Task receiversDeletionTask = this.cache[RequestType.DeleteReceiver] as Task<Tuple<ServiceResponseCode, bool>>;
Task receiverDeletionFromCacheTask = new Task((receiversDeletionTask) => { });

Но, это побуждает меня: Делегат «Действие» не принимает 1 аргумент

Я знаю, что действие не требует спора.Мне нужен способ, как сделать так, чтобы это произошло.

У меня есть задача, которая удаляет приемник на сервере - receiversDeletionTask;Мне нужно после завершения receiversDeletionTask запустить метод, который удалит данные из локального кэша.И мне нужно возвращать информацию только тогда, когда метод очистки кэша завершится.

...