我有下面的代码可以无限期运行,但是我要花些时间作为用户的输入。
因此,如果用户输入15密耳,我想将此代码运行15密耳。
是的,我可以将DateTime.Now与15mits进行比较,但是还有其他有效的方法吗?因为这将是我的多线程应用程序。
private static async void SendDeviceToCloudMessagesAsync(string deviceid , string deviceKey)
{
deviceClient = DeviceClient.Create("HOSTNAME", new DeviceAuthenticationWithRegistrySymmetricKey(deviceid, deviceKey), Microsoft.Azure.Devices.Client.TransportType.Mqtt);
double minTemperature = 20;
double minHumidity = 60;
int messageId = 1;
Random rand = new Random();
do
{
double currentTemperature = minTemperature + rand.NextDouble() * 15;
double currentHumidity = minHumidity + rand.NextDouble() * 20;
var telemetryDataPoint = new
{
messageId = messageId++,
deviceId = deviceid,
temperature = currentTemperature,
humidity = currentHumidity
};
var messageString = JsonConvert.SerializeObject(telemetryDataPoint);
var message = new Microsoft.Azure.Devices.Client.Message(Encoding.ASCII.GetBytes(messageString));
message.Properties.Add("temperatureAlert", (currentTemperature > 30) ? "true" : "false");
await deviceClient.SendEventAsync(message);
Console.WriteLine("{0} > Sending message: {1}", DateTime.Now, messageString);
await Task.Delay(1000);
} while (true);
}
答案 0 :(得分:1)
您可以签出System.Timers.Timer。您可以在构造函数中创建一个实例来设置时间间隔,然后编写一个方法来处理Elapsed事件。
// Create a timer with a two second interval.
var aTimer = new System.Timers.Timer(2000);
// Hook up the Elapsed event for the timer.
aTimer.Elapsed += OnTimedEvent // Name this whatever you want and put code here;
aTimer.AutoReset = true;
aTimer.Enabled = true;
您现在所要做的就是编写Elapsed事件处理程序...在这种情况下为OnTimedEvent。请注意,此方法必须具有以下签名:
私有静态空对象源,ElapsedEventArgs e)
答案 1 :(得分:0)
尝试替换您的代码
等待Task.Delay(TimeSpan.FromSeconds(1000));