c# - 中断方法 C#
问题描述
C# 中有没有办法通过条件中断方法,而不在每一行之后手动检查条件?
manuelly 看起来像这样:
function(){
i++;
condition okay?;
i = i + 2;
condition okay?;
i = i + 3;
condition okay?;
.....
}
解决方案
C# 有自己的机制来取消长时间运行的进程:CancellationToken 结构。提供的链接有一个例子。另外,您可以自行搜索“.net canceltoken”。
要监控的关键属性是布尔IsCancellationRequested。那个样子也有一个简单的例子。
请务必了解您的长期运行方法需要检查此标志以决定要做什么。您可以决定使用ThrowIfCancellationRequested方法突然取消。但是,如果您打开了一次性对象,您将需要优雅地取消该方法。
另一个很好的链接是:托管线程中的取消
它解释了CancellationTokenSource和CancellationToken
. 您的长期运行方法应该只接受一个CancellationToken
. 您的调用方法可能有一个CancellationTokenSource
,您将调用它的Cancel方法或CancelAfter方法来与传递的您希望取消的令牌进行通信。
该CancelAfter
方法是对长时间运行的方法设置时间限制的好方法。
CancellationToken
许多人会在他们的方法签名中使用可空值。示例:LongRunningMethod(CancellationToken? token = null)
。虽然这可行,但我认为最好使用CancellationToken.None LongRunningMethod(CancellationToken token = default(CancellationToken)
,它返回一个空的CancellationToken.None。
推荐阅读
- android - 为什么只有重启应用后才会出现数据?
- mongodb - Flask Mongoengine 过滤查询
- android - 如何在android中添加、删除ListAdapter Items?
- html - 如何在密码字段(chrome和firefox)中禁用自动填充(自动完成)
- javascript - 在“ul”上,桌面垂直滚动有效,但移动设备的触摸滚动无效
- python - 加载 json 文件时出现 JSON 解码错误
- reactjs - 无需刷新页面即可更新嵌套数组(一对多关系)的状态
- r - R ggplot geom_boxplot 数据组和标签四分位数(铰链、晶须)
- c# - 使用正则表达式获取一些字符串
- sql - 根据sql(teradata)中另一列的条件分配列值