2014-01-16 5 views
0

Я загружаю файл с использованием многостраничной формы данных, и мне нужно сохранить описание файла загруженного файла. Я использую следующий кодКак вернуть некоторые значения из асинхронной задачи

FileDescription temp = new FileDescription(); 
var task = Request.Content.ReadAsMultipartAsync(streamProvider).ContinueWith<IEnumerable<FileDescription>>(t => 
{ 

    if (t.IsFaulted || t.IsCanceled) 
    { 
     throw new HttpResponseException(HttpStatusCode.InternalServerError); 
    } 

    var fileInfo = streamProvider.FileData.Select(i => 
    { 
     var info = new FileInfo(i.LocalFileName); 
     temp.AssociatedSchool = 1; 
     temp.FileName = info.Name; 
     temp.LocalFileName = i.LocalFileName; 
     temp.FileSize = info.Length/1024; 
     temp.IsFileValid = true; 
     temp.NoOfRecords = 1; 
     temp.UploadedBy = 1; 
     return temp; 
    }); 
    return fileInfo; 
}); 

Этот код оленья кожа установить значения для temp объекта. Может ли кто-нибудь сказать мне альтернативный способ получить ценности? task.Result всегда имеет значение null. Как я могу получить значения из потока?

+0

'Select' ленив функция LINQ – Grundy

+1

, где вы начинаете или ждать задачу? –

+0

@Grundy, есть ли замена Select? – NewBie

ответ

1

Попробуйте изменить свой образец, как этот

var descriptions = Request.Content.ReadAsMultipartAsync(streamProvider) 
          .ContinueWith<IEnumerable<FileDescription>>(t => 
      { 
       if (t.IsFaulted || t.IsCanceled) 
       { 
        throw new HttpResponseException(HttpStatusCode.InternalServerError); 
       } 

       var fileInfo = streamProvider.FileData.Select(i => 
       { 
        var info = new FileInfo(i.LocalFileName); 
        return new FileDescription(){ 
         AssociatedSchool = 1; 
         FileName = info.Name; 
         LocalFileName = i.LocalFileName; 
         FileSize = info.Length/1024; 
         IsFileValid = true; 
         NoOfRecords = 1; 
         UploadedBy = 1; 
        } 
       }); 
       return fileInfo; 
      }).Result; 

var temp = descriptions.First();//Possibly you need FirstOrDefault 
Смежные вопросы