代码之家  ›  专栏  ›  技术社区  ›  Big Daddy

C#任务继续,但未按预期工作

  •  -1
  • Big Daddy  · 技术社区  · 6 年前

    GetDocVM() AddUserDocuments() 方法完成。为什么?因为 不会把刚才添加的记录拉进来。我继承了这段代码并试图改进它。

    ut.ModelJSON = await Task.Run(() => _userTransactionService.ConvertToModelJson(typeof(UserDocument).Name, "", transactionDocs)).ConfigureAwait(false);
    var taskReturnsVoid = Task.Run(() => _genericUploadService.AddUserDocuments(ut, docs));
    List<GenericUploadDocumentViewModel> viewModel = new List<GenericUploadDocumentViewModel>();
    await taskReturnsVoid.ContinueWith((t) =>
               {
                     viewModel = GetDocVM();//I EXPECTED THIS TO WAIT TO BE EXECUTED
               });
    return Json(viewModel, JsonRequestBehavior.AllowGet);  //GETTING HERE TOO SOON
    
    1 回复  |  直到 6 年前
        1
  •  5
  •   Adam Simon    6 年前

    我不羡慕你,因为这看起来是一个非常糟糕的代码基础,只是这几行遭受多重问题。

    其中一个最大的问题是,您不应该使用 在ASP.NET上。这是 what Stephen Cleary writes about this :

    his articles 因为它是异步/等待知识的极好来源。)

    所以你的代码被清理了:

    ut.ModelJSON = _userTransactionService.ConvertToModelJson(typeof(UserDocument).Name, "", transactionDocs);
    _genericUploadService.AddUserDocuments(ut, docs);
    List<GenericUploadDocumentViewModel> viewModel = GetDocVM();
    return Json(viewModel, JsonRequestBehavior.AllowGet);
    

    然而,我怀疑 获取文档虚拟机

    ut.ModelJSON = _userTransactionService.ConvertToModelJson(typeof(UserDocument).Name, "", transactionDocs);
    await _genericUploadService.AddUserDocumentsAsync(ut, docs);
    List<GenericUploadDocumentViewModel> viewModel = await GetDocVMAsync();
    return Json(viewModel, JsonRequestBehavior.AllowGet);