2016-03-29 8 views
0

YouTubeアップロードデータapiを使用してビデオをアップロードしたいのですが、残念ながらビデオをアップロードしようとしたときにタスクがキャンセルされたというエラーが発生しましたawait videosInsertRequest.UploadAsync(); すでにAsyncTimeoutは私の行動は、それが"タスクがキャンセルされました" HTTPクライアントのデフォルトタイムアウト値

public static async Task UploadVideos(List<MyVideo> videosList) 
    { 
     foreach (var vid in videosList) 
     { 
      await Upload(vid); 
     } 
    } 
    public static async Task Upload(MyVideo newVideo) 
    { 
     UserCredential credential; 
     using (var stream = new FileStream("G:\\client_secret_783534382593-0cn4gm229raqq97kdu0ghsj9hqfsc5o1.apps.googleusercontent.com.json", FileMode.Open, FileAccess.Read)) 
     { 
      credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
       GoogleClientSecrets.Load(stream).Secrets, 
       // This OAuth 2.0 access scope allows an application to upload files to the 
       // authenticated user's YouTube channel, but doesn't allow other types of access. 
       new[] { YouTubeService.Scope.YoutubeUpload }, 
       "user", 
       CancellationToken.None 
      ); 
     } 

     var youtubeService = new YouTubeService(new BaseClientService.Initializer() 
     { 
      HttpClientInitializer = credential, 
      ApplicationName = Assembly.GetExecutingAssembly().GetName().Name 
     }); 



      Video video = new Video(); 
      video.Snippet = new VideoSnippet(); 
      video.Snippet.Title = newVideo.Title; 
      video.Snippet.Description = newVideo.Description; 
      video.Snippet.Tags = new string[] { newVideo.Tags }; 
      video.Snippet.CategoryId = newVideo.Category; // See https://developers.google.com/youtube/v3/docs/videoCategories/list 
      video.Status = new VideoStatus(); 
      video.Status.PrivacyStatus = newVideo.PrivacyStatus; // or "private" or "publi 
      var filePath = newVideo.Path; // Replace with path to actual movie file. 


     // YouTubeHandler t = new YouTubeHandler(); 
     using (var fileStream = new FileStream(filePath, FileMode.Open)) 
      { 
       var videosInsertRequest = youtubeService.Videos.Insert(video, "snippet,status", fileStream, "video/*"); 
       videosInsertRequest.ProgressChanged += videosInsertRequest_ProgressChanged; 
       videosInsertRequest.ResponseReceived += videosInsertRequest_ResponseReceived; 

       await videosInsertRequest.UploadAsync(); 
      } 
     } 


    static void videosInsertRequest_ProgressChanged(Google.Apis.Upload.IUploadProgress progress) 
    { 
      switch (progress.Status) 
      { 
       case UploadStatus.Uploading: 
        Console.WriteLine("{0} bytes sent.", progress.BytesSent); 
        break; 

       case UploadStatus.Failed: 
        Console.WriteLine("An error prevented the upload from completing.\n{0}", progress.Exception); 
        break; 
      } 
     } 

     static void videosInsertRequest_ResponseReceived(Video video) 
    { 
      Console.WriteLine("Video id '{0}' was successfully uploaded.",  video.Id); 
     } 
    } 
} 

私はASPと非同期タスク

に新しいですと誰もが私を助けてくださいすることができているのYouTubeのAPIを呼び出す

[AsyncTimeout(3600000)] 
public async Task <ActionResult> YouTube(int? Id) 
{ 
    // await Run(); 
    var dbListVideos = db.Videos.Where(v => v.Id == Id).ToList(); 
    await YouTubeHandler.UploadVideos(dbListVideos); 
    return View(); 
} 

ある属性は適用されています

+1

この回答を見てください:http://stackoverflow.com/a/35008208/1129995 YouTubeService.HttpClient.Timeoutのタイムアウトを設定しようとしました – Zaki

+0

私はこの答えを見ていますが、私の助けにはなりません! –

+1

[YouTube APIのアップロード「タスクがキャンセルされました」]の複製があります(http://stackoverflow.com/questions/34249180/youtube-api-upload-a-task-was-cancelled) – DaImTo

答えて

3

私はこの問題の解決策を見つけましたサービスを使用する前にタイムアウトを設定する必要があります。

 YouTubeService youtubeService = new YouTubeService(initializer); 
     youtubeService.HttpClient.Timeout= TimeSpan.FromMinutes(60); 

これはタスクのキャンセルされた問題を解決します。ありがとう

関連する問題