2017-03-31 136 views
2

我熟悉在Google云端硬盘中创建文件夹,但我正在研究如何使用异步方法执行此操作。然而,这样做,我不知道如何获得我明确添加到我想要返回的字段的字段。如何从ExecuteAsync()方法获得字段

我下面的代码:

private Task<Google.Apis.Drive.v3.Data.File> CreateGoogleDriveFolderAsync(DriveService service, string foldername, string parent_id = null) 
{ 
    IList<string> parent_ids = new List<string>(); 

    Google.Apis.Drive.v3.Data.File folder = new Google.Apis.Drive.v3.Data.File 
    { 
     Name = foldername 
     , MimeType = "application/vnd.google-apps.folder" 
     , Description = "Client Name: blah\nUser: Rudy\n" 
    }; 

    var insert = service.Files.Create(folder); 

    // The field I'd like to get somewhere. 
    insert.Fields = "id"; 

    var task = insert.ExecuteAsync(); 

    task.ContinueWith(t => 
    { 
     // NotOnRanToCompletion - this code will be called if the upload fails 
     Console.WriteLine("Failed to create folder \"{0}\": " + t.Exception, foldername); 
    }, TaskContinuationOptions.NotOnRanToCompletion); 
    task.ContinueWith(t => 
    { 
     // I'd like a way to access "id" from my insert execution. 
     log.insertLogging(foldername, "Directory Created"); 
    }); 

    return task; 
} 
+4

等待任务,并得到从那里你应该有权访问其属性 – Nkosi

+0

谢谢,@Nkosi,我在等待,但访问“其”属性?我的方法调用如下:'await CreateGoogleDriveFolderAsync(service,“MyNewFolder”);' –

回答

3

使用的例子从documentationawait任务,并获取文件回来从那里,你应该能够访问它的属性

private async Task<File> CreateGoogleDriveFolderAsync(DriveService driveService, string foldername) { 
    var metadata = new File() 
    { 
     Name = foldername, 
     MimeType = "application/vnd.google-apps.folder" 
    }; 
    var request = driveService.Files.Create(metadata); 
    request.Fields = "id"; 
    var folder = await request.ExecuteAsync(); 
    Console.WriteLine("Folder ID: " + folder.Id); 

    return folder; 
} 
+0

谢谢,就是这样。我没有设置任何等待电话。我还发现在这个方法中我可以这样做:'task.Result.Id',其中'task.Result'返回Google文件。再次感谢。 –