相关疑难解决方法(0)

延迟功能调用

是否有一个很好的简单方法来延迟函数调用,同时让线程继续执行?

例如

public void foo()
{
    // Do stuff!

    // Delayed call to bar() after x number of ms

    // Do more Stuff
}

public void bar()
{
    // Only execute once foo has finished
}
Run Code Online (Sandbox Code Playgroud)

我知道这可以通过使用计时器和事件处理程序来实现,但我想知道是否有一种标准的c#方式来实现这一目标?

如果有人好奇,那么需要的原因是foo()和bar()在不同的(单例)类中,我需要在特殊情况下相互调用.问题是这是在初始化时完成的,所以foo需要调用bar,它需要一个正在创建的foo类的实例...因此延迟调用bar()以确保foo完全实例化.读回来几乎是糟糕的设计!

编辑

我会在建议下接受关于糟糕设计的观点!我一直认为我可能能够改进系统,但是,这种令人讨厌的情况只会在抛出异常时发生,而在其他所有其他时候两个单身人士共存非常好.我认为我不会讨厌令人讨厌的异步模式,而是我要重构其中一个类的初始化.

c# function delay

80
推荐指数
5
解决办法
11万
查看次数

异步睡眠循环

所以对于我的一个项目,我需要每 100 毫秒从一个硬件中获取值。获取需要 x 毫秒。所以我正在寻找但找不到的是一种确保 for/while 总是需要 100 毫秒(或更多)的方法。

所以在伪代码中:

for (int i = 0; i < 100; i++) // Take measurements for 10 seconds
{
    // Call some async method that sleeps for 100 ms
    this.temperatureList.Add(this.HardwareManager.GetSensorValue(ESensor.Temperature)); // Takes 15 ms
    this.temperatureList.Add(this.HardwareManager.GetSensorValue(ESensor.Pressure)); // Takes 30 ms
    // await async method to finish
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试了一些异步等待的东西,但我似乎无法理解它。谁能帮我找到一种可靠的方法来以 100 毫秒的间隔进行 10 秒的测量?

编辑:我知道因为我在 Windows 上运行 C#,所以计时并不是一个真正有效的选择。但这在我的问题中并不重要。我的问题是,如何确保 for 循环至少需要(!!!)100 毫秒,同时尽可能接近 100 毫秒。

c# wait async-await

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

标签 统计

c# ×2

async-await ×1

delay ×1

function ×1

wait ×1