我有一个C#程序需要每隔X分钟调度一个线程,但前提是先前调度的线程(从X分钟开始)以前还没有运行.
Timer单独一个普通的老人将无法工作(因为无论是否先前已发送的流程已完成,它每X分钟发送一次事件).
将要发送的进程在执行任务所花费的时间内变化很大 - 有时可能需要一秒钟,有时可能需要几个小时.如果它从上次启动时仍在处理,我不想再次启动该过程.
谁能提供一些有用的C#示例代码?
我在便携式库/ Windows Store中找不到计时器.(定位.net 4.5和Windows Store又称Metro)
有没有人知道如何创建某种计时事件?
我需要一些秒表,所以这应该每秒刷新一次
我正在使用时间戳来临时命令我的程序中的并发更改,并要求更改的每个时间戳都是唯一的.但是,我发现简单地调用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) 我正在开发一个WPF客户端应用程序webservice.这个应用程序定期发送数据到.当用户登录应用程序时,我希望每5 mts运行特定方法将数据发送到.asmx服务.
我的问题是我是否需要使用线程或计时器.这个方法执行应该在用户与应用程序交互时发生.即在此方法执行期间不阻止UI
有资源寻找吗?
我有C#2.0代码,我移植到C#4.0.我想用System.Task它代替System.ThreadPool.QueueueUserWorkItem.我也想用System.Task它代替System.Threading.Timer.
如何创建定期System.Task?我没有看到任何东西System.Task或System.TaskFactory.
亲切的考虑,
pKumara
我无法同化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兼容?