You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Microsoft Graph删除Outlook邮件附件报ErrorIrresolvableConflict问题咨询

问题1:现有代码的问题

你的代码存在两处可直接引发该异常的问题:

  • 异步调用逻辑不合理:DeleteAttachments 方法中使用 Task.Run() 包裹异步方法后再同步阻塞等待的写法属于无效的异步同步混用,既浪费线程资源,在特定同步上下文环境下还可能引发死锁,建议直接将该方法改为异步方法,循环内直接 await DeleteAttachmentAsync(attachmentId) 即可。
  • 冲突根因:每成功删除一个邮件附件,服务端都会自动更新对应邮件实体的版本标识(即报错信息中提到的change key)。你构造所有删除请求时复用了初始获取的 CurrentMessage 对象,该对象携带的change key是固定的旧版本值,第一次删除成功后,后续请求携带的旧change key和服务端最新版本不匹配,就会触发不可解决的冲突错误,附件数量越多冲突概率越高。
问题2:单封邮件附件批量删除支持情况

Microsoft Graph原生支持单次批量删除单封邮件的所有附件,你可以通过官方提供的$batch批处理能力实现,仅需发起1次HTTP调用,既能完全规避change key冲突问题,还能大幅降低接口请求开销。

C# Graph SDK实现批量删除的核心代码参考:

public async Task BatchDeleteAttachmentsAsync(List<string> attachmentIds)
{
    var batchRequestContent = new BatchRequestContent();
    foreach (var attachmentId in attachmentIds)
    {
        var deleteRequest = GraphServiceClient
            .Users[CurrentUser.Id]
            .MailFolders[CurrentFolder.Id]
            .Messages[CurrentMessage.Id]
            .Attachments[attachmentId]
            .Request();
        batchRequestContent.AddBatchRequestStep(deleteRequest);
    }
    // 单次提交所有删除请求
    await GraphServiceClient.Batch.Request().PostAsync(batchRequestContent);
}

内容的提问来源于stack exchange,提问作者maffer1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 09:36:05