小编cha*_*ani的帖子

cancellationtoken timeout vs task.delay()和timeout

我想运行一个应该在n毫秒后超时的操作.我已经实现了两种方法,一种是在等待n毫秒后自己取消操作,另一种是在n毫秒后将CancellationToken设置传递到期.

我担心当我的系统负载很重时,canceltoken可能会在操作开始之前到期.看来如果我自己使用Task.Delay()实现超时,那么在我的操作开始之后,Delay()调用才会运行.

我是这样做的:

public static async Task<T> TimeoutAfter<T>(this Task<T> task, TimeSpan timeout)
    {
        Task completedTask = await Task.WhenAny(task, Task.Delay(timeout));
        if (completedTask == task)
        {
            return await task;
        }

        throw new TimeoutException();
    }

// Use it like this
await SomeOperationAsync().TimeoutAfter(TimeSpan.FromMilliseconds(n));
Run Code Online (Sandbox Code Playgroud)

相比:

CancellationTokenSource source = new CancellationTokenSource(TimeSpan.FromMilliseconds(n));
await SomeOperationAsync(source.Token);
Run Code Online (Sandbox Code Playgroud)

.net task-parallel-library

10
推荐指数
1
解决办法
8435
查看次数

无法在CreateQuery上获得Azure TableEntity etag

我正在查询表中的实体,更改它们,然后执行替换操作.替换操作失败,因为etag上的etag属性为null.我检查过,当我从CreateQuery()调用中获取实体时etag为null,但是当我执行Retrieve()时填充etag.有没有办法手动获取etag?

IEnumerable<MyEntity> query = from e in serviceContext.CreateQuery<MyEntity>(tableName)
                                        where e.Id == queryId
                                        select e;

MyEntity entity = query.FirstOrDefault();

// Update the MyEntity object

var replaceOperation = TableOperation.Replace(entity);
MyCloudTableClient.GetTableReference(tableName).Execute(replaceOperation);

// Exception is thrown here that eTag value is null
Run Code Online (Sandbox Code Playgroud)

azure azure-table-storage

6
推荐指数
1
解决办法
740
查看次数

Invoke-RestMethod:操作已超时

我有一个删除资源并创建新资源的脚本.它时不时地超时,我无法弄清楚为什么.这似乎发生在我多次运行脚本时,但我无法得到明确的模式.我发现我的服务器还没有收到消息,因为还没有记录请求.

$old_values = Invoke-RestMethod -Uri $uri -Method Get

foreach($old_value in $old_values.result) {
    Invoke-RestMethod -Uri "$uri&key=$old_value.id" -Method Delete
}

$new_value = Invoke-RestMethod -Uri "$uri" -Body "{}" -ContentType application/json -Method Post
Run Code Online (Sandbox Code Playgroud)

有趣的是,当我直接从powershell运行Invoke-RestMethod调用时,偶尔会出现超时.我也和Fiddler一起跑了他们,从来没有超时.

[编辑]我一直在检查与netstat的连接.命令挂起时,它们被列为ESTABLISHED.但我一直看到TIME_WAIT连接列在我的服务器上.我的关系有可能没有关闭吗?

powershell http

5
推荐指数
1
解决办法
4114
查看次数

Html.Hidden字段未设置

我的视图中有一个隐藏的字段,如下所示:

using (Html.BeginForm("Action", "Schedule"))
{
    @Html.Hidden("Id", Model.Schedule.Id)
    ...
}
Run Code Online (Sandbox Code Playgroud)

以及一个接收如下信息的动作方法:

public ActionResult AddEventToSchedule(Event NewEvent, Guid Id)
{
    // Do something
}
Run Code Online (Sandbox Code Playgroud)

即使Model.Schedule.Id不为空,我仍然会传入一个空的Guid.我检查了html源代码,隐藏字段也是一个空的Guid(使用断点来验证Model.Schedule.Id不为空).

奇怪的是当我尝试通过下面的模型访问Id值时,html隐藏字段使用guid正确填充,但传递给action方法的模型为空.

public ActionResult AddEventToSchedule(Event NewEvent, ScheduleModel model)
{
    // model.Schedule is null!
}
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc

4
推荐指数
1
解决办法
4116
查看次数

如何创建一个属性包含点(句点)的json字符串?

我正在尝试发送一个带有HttpRequest这样的JSON对象:

{
   "some.setting.withperiods":"myvalue"
}
Run Code Online (Sandbox Code Playgroud)

我一直在为我的其他请求创建匿名对象,但由于名称包含一个点,因此我不能这样做.

我知道我可以创建一个类并指定[DataMember(Name="some.setting.withperiods")]属性,但必须有一个更轻量级的解决方案.

c# json.net

3
推荐指数
2
解决办法
3969
查看次数