gpt4 book ai didi

.net - 最好在任务内部还是外部抛出 NotSupportedException?

转载 作者:行者123 更新时间:2023-12-05 01:09:11 25 4
gpt4 key购买 nike

我们有一个下游系统,一个 ERP 系统,它可以通过 SOAP 公开其表。它发布的 Web 服务通常具有 Create、Update 和 Delete 方法。然后我们使用 svcutil 生成代理,包括异步方法。最后,我们在此之前放置了一个 ACL,以便其他系统与之交互。

我们还刚刚发现了一个重要的不变量——项目的成本信息不能由 ERP 系统本身以外的任何东西更新。然而,真正愚蠢的 API 将允许消费者这样做。

我解决这个问题的想法是对 WCF 代理进行子类化,并有显式的实现来更新抛出 NotSupportedException .不,这不会阻止开发人员生成自己的代理并执行此操作。但至少我们可以保证在通过我们的 ACL 时不会发生这种情况。

    Update_Result Item_Port.Update(Update request)
{
throw new NotSupportedException();
}

对于异步方法,我可以做
    Task<Update_Result> Item_Port.UpdateAsync(Update request)
{
throw new NotSupportedException();
}

或者
    Task<Update_Result> Item_Port.UpdateAsync(Update request)
{
return Task.Factory.StartNew<Update_Result>(() =>
{
throw new NotSupportedException();
});
}

从异步的角度来看,哪个更“正确”?

最佳答案

两者会有不同的行为。

在第一种情况下,该 API 的调用者将获得 NotSupportedException立即调用此方法。

在您的第二种情况下,调用者将收到错误的 Task<T> (或者在调用后很快就会出现故障)。这将导致任务继续或获取任务值时出现异常(通过 task.Result )。

鉴于您的目标,我个人会采用第一种方法。这具有较少的开销(您不是在创建任务),并且它使调用站点立即发现有问题。虽然它不如编译时错误好,但在调试过程中被遗漏的可能性要小得多,因为即使以“即发即忘”的方式调用任务,它也会抛出。

关于.net - 最好在任务内部还是外部抛出 NotSupportedException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16158613/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com