任务,优先级,调度和异步/等待

时间:2015-10-02 07:48:29

标签: c# asynchronous task

我试图通过定期查看'来监控连接。并行'超时' ping不会及时回来的任务。

var pingTask = await Task.WhenAny( 
    Task.Run(() =>
    {
        try
        {
            PingThing();
            return true;
        }
        catch
        {
            return false;
        }
    }),
    Task.Run(() =>
    {
        Task.Delay(5000).Wait();
        return false; 
    })
);
if (!pingTask.Result) //etc...

我似乎得到的情况是“其他东西'优先考虑,这个代码放在一边。所以ping通常需要几毫秒,我得到五秒钟的超时。

问题是,当我最初在代码中放一个秒表来检查时,它并没有说出5秒钟之类的话。让我想知道CPU是不是在关闭我的线程做其他工作。但这反过来让我想知道为什么它会关闭第一个任务,但保持第二个任务(否则'超时'任务也需要更长时间)。

所以我有几个问题:

  • 这是一个看似合理的假设吗?
  • 有没有办法在任务中设置优先级?
  • 如果这是一个好的或坏的想法?
  • 在这里使用等待一个坏主意(它是否以某种方式表示低优先级)?
  • 有没有办法监控所有线程正在做什么来尝试找出其他东西'这是在偷我的处理器时间吗?

漏洞抽象FTW ......

0 个答案:

没有答案