Blazor 服务器 EF Core 取消

Blazor Server EF Core Cancelation

在我的应用程序中,我必须能够取消上传,我尝试使用线程取消但没有任何反应,我认为这是因为我使用了 DBContextFactory 并为每个上传的文件创建了一个上下文。

所以我这样做是为了将文件保存在数据库中:

    private async Task OnFilesDropped(FileUploadModel upload)
    {
        Uploads.Add(upload);
                           
        if (string.IsNullOrEmpty(upload.Error))
        {                                
            using var context = DbFactory.CreateDbContext();

            upload.Context = context;

            context.FileUploads.Add(upload);

            upload.UploadCompletion = 45;

            await context.SaveChangesAsync();

            upload.UploadCompletion = 100;                                                                         
        }                        
    } 

在删除 uploaded/uploading 文件的情况下:

    private async Task DeleteUpload(FileUploadModel upload)
    {
        Uploads.Remove(upload);

        await UploadsChanged.InvokeAsync(Uploads);

        if (string.IsNullOrEmpty(upload.Error))
        {
            if (upload.UploadCompletion != 100)
            {
                await upload.Context.DisposeAsync();
            }
            else
            {
                using var context = DbFactory.CreateDbContext();

                context.FileUploads.Remove(upload);

                await context.SaveChangesAsync();
            }                
        }
        
    }

这种方法可行,因为我处理了上下文,但我想知道是否有更好的方法来做到这一点?或者如果这个解决方案可能有问题?

此致。

你应该使用 CancellationToken.

您上下文中的 SaveChangesAsync 方法有一个重载,可以提供一个 cancellationToken。

await context.SaveChangesAsync(cancellationToken);

如果您在调用堆栈中已经有一个 CancellationToken 更高层,您可以将那个向下传递。否则,您可以创建一个 CancellationTokenSource 并使用它来生成取消令牌,然后在适当的时候取消它。