相关疑难解决方法(0)

C#每隔X分钟运行一个线程,但前提是该线程尚未运行

我有一个C#程序需要每隔X分钟调度一个线程,但前提是先前调度的线程(从X分钟开始)以前还没有运行.

Timer单独一个普通的老人将无法工作(因为无论是否先前已发送的流程已完成,它每X分钟发送一次事件).

将要发送的进程在执行任务所花费的时间内变化很大 - 有时可能需要一秒钟,有时可能需要几个小时.如果它从上次启动时仍在处理,我不想再次启动该过程.

谁能提供一些有用的C#示例代码?

c# timer

62
推荐指数
4
解决办法
5万
查看次数

便携式库中的定时器

我在便携式库/ Windows Store中找不到计时器.(定位.net 4.5和Windows Store又称Metro)

有没有人知道如何创建某种计时事件?

我需要一些秒表,所以这应该每秒刷新一次

c# timer portable-class-library microsoft-metro

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

如何确保时间戳始终是唯一的?

我正在使用时间戳来临时命令我的程序中的并发更改,并要求更改的每个时间戳都是唯一的.但是,我发现简单地调用DateTime.Now是不够的,因为如果快速连续调用,它通常会返回相同的值.

我有一些想法,但没有任何事情让我觉得这是"最好的"解决方案.有没有一种方法可以保证每次连续调用都能产生一个独特的DateTime

我应该为此使用不同的类型,也许是长整数?DateTime具有明显的优势,可以像实时一样轻松解释,不像增量计数器.

更新:这是我最终编写的一个简单的折衷解决方案,它仍然允许我DateTime用作我的临时密钥,同时在每次调用方法时确保唯一性:

private static long _lastTime; // records the 64-bit tick value of the last time
private static object _timeLock = new object();

internal static DateTime GetCurrentTime() {
    lock ( _timeLock ) { // prevent concurrent access to ensure uniqueness
        DateTime result = DateTime.UtcNow;
        if ( result.Ticks <= _lastTime )
            result = new DateTime( _lastTime + 1 );
        _lastTime = result.Ticks;
        return result;
    }
}
Run Code Online (Sandbox Code Playgroud)

因为每个滴答值只有一千万分之一秒,所以这种方法在每秒调用1000万次时会引入明显的时钟偏差(顺便说一句,它的执行效率足够高),这意味着它是完全可以接受我的目的.

这是一些测试代码:

DateTime start …
Run Code Online (Sandbox Code Playgroud)

.net c# concurrency datetime

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

如何使用线程或计时器从WPF客户端应用程序定期执行方法

我正在开发一个WPF客户端应用程序webservice.这个应用程序定期发送数据到.当用户登录应用程序时,我希望每5 mts运行特定方法将数据发送到.asmx服务.

我的问题是我是否需要使用线程或计时器.这个方法执行应该在用户与应用程序交互时发生.即在此方法执行期间不阻止UI

有资源寻找吗?

c# wpf multithreading client-applications timer

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

如何创建定期任务

我有C#2.0代码,我移植到C#4.0.我想用System.Task它代替System.ThreadPool.QueueueUserWorkItem.我也想用System.Task它代替System.Threading.Timer.

如何创建定期System.Task?我没有看到任何东西System.TaskSystem.TaskFactory.

亲切的考虑,

pKumara

c# multithreading

8
推荐指数
2
解决办法
1万
查看次数

C#异步聚合和调度

我无法同化c#Task,异步和等待模式.

Windows服务,.NET v4.5.2服务器端.

我有一个Windows服务接受各种传入记录的来源,通过自托管的web api进行外部ad-hoc.我想批量处理这些记录,然后将它们转发给另一个服务.如果批处理记录的数量超过阈值,则应立即调度该批处理.此外,如果时间间隔已经过去,也应该调度原样的批次.这意味着记录永远不会超过N秒.

我正在努力将其融入基于任务的异步模式.

在过去的日子里,我会创建一个Thread,一个ManualResetEvent和一个System.Threading.Timer.线程将在重置事件上循环等待.Timer会在触发时设置事件,当批量大小超过阈值时,代码会执行聚合.在Wait之后,Thread将停止Timer,执行调度(HTTP Post),重置Timer并清除ManualResetEvent,循环返回和Wait.

然而,我看到民众说这是'坏'因为等待阻止了一个有价值的线程资源,而async/await是我的万能药.

首先,他们是对的吗?我的方式是过时的,效率低下还是JFDI?

我发现的例子在这里的配料和这里的间隔任务,而不是两者的组合.

这个要求实际上是否与async/await兼容?

c# async-await

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