相关疑难解决方法(0)

何时使用Task.Delay,何时使用Thread.Sleep?

什么时候使用Task.DelayThread.Sleep有很好的规则?

  • 具体来说,是否有一个最小值来提供一个有效/高效的另一个?
  • 最后,由于Task.Delay导致异步/等待状态机上下文切换,是否有使用它的开销?

c# multithreading task-parallel-library

343
推荐指数
5
解决办法
20万
查看次数

为什么Thread.Sleep如此有害

我经常看到它提到Thread.Sleep();不应该使用,但我不明白为什么会这样.如果Thread.Sleep();可能造成麻烦,是否有任何替代解决方案具有相同的安全性?

例如.

while(true)
{
    doSomework();
    i++;
    Thread.Sleep(5000);
}
Run Code Online (Sandbox Code Playgroud)

另一个是:

while (true)
{
    string[] images = Directory.GetFiles(@"C:\Dir", "*.png");

    foreach (string image in images)
    {
        this.Invoke(() => this.Enabled = true);
        pictureBox1.Image = new Bitmap(image);
        Thread.Sleep(1000);
    }
}
Run Code Online (Sandbox Code Playgroud)

c# multithreading sleep

117
推荐指数
6
解决办法
17万
查看次数

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

Winforms相当于javascript setTimeout

是否有一个简单的解决方案/想法/策略来在WinForms应用程序中创建一个setTimeout等效函数.我主要是一个Web开发人员,但我不确定如何在WinForms应用程序中进行此操作.基本上,我有一个文本框,每次击键后我想运行一个任务来填充一个列表(比如一个自动完成类型的东西),但是如果用户继续输入字符,希望能够取消(例如clearTimeout)...

我唯一的猜测是可能使用BackGroundWorker并使其初始睡眠,当它处于休眠状态时,它可以被取消,如果用户停止输入键并且睡眠期结束,则它会运行任务等

(我不在乎一个例子是C#还是Vb.Net)

.net javascript settimeout winforms

10
推荐指数
5
解决办法
1万
查看次数

ASP.Net MVC 4我需要延迟执行

我有一个ASP.Net MVC 4应用程序,它定期调用外部API来获取信息(资源).此资源具有帐户的速率限制器(意味着其他应用程序使用相同的池并可能达到限制).当达到此限制时,它将以秒为单位发回一个标题为"Retry-After"的HTTP状态代码429(比方说25秒).

如果我的应用程序得到此响应,我将需要延迟执行25秒并重试.首先,让我说这个代码运行的方法是一个ASP.Net 4.5异步方法.为此,我正在考虑使用System.Threading.Thread.Sleep(25000)Now,我真的不喜欢使用它,有没有更好的方法呢?

我不得不说我为这个开放式问题道歉,但我找不到任何正确的延迟执行方式(同时保持异步并确保我们不会耗尽线程)

更新: 以下代码是否会更好地延迟?

  await Task.Run(() => Thread.Sleep(10000))
Run Code Online (Sandbox Code Playgroud)

.net c# async-await asp.net-mvc-4 asp.net-4.5

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

Thread.Sleep(2500)vs. Task.Delay(2500).Wait()

我想要清楚一点.我知道Task.Delay内部会使用一个Timer,它显然是基于任务的(等待),但Thread.Sleep会导致线程被阻塞.但是,在任务上调用.Wait会导致线程被阻塞吗?

如果没有,人们会认为这Task.Delay(2500).Wait()比好Thread.Sleep(2500).这跟我所说的SO问题/答案略有不同.Wait().

c# multithreading task task-parallel-library async-await

7
推荐指数
2
解决办法
5616
查看次数

任务并取消阻止用户界面

我想用线程取消阻止ui.

你能告诉我这段代码有什么区别:

private async void button1_Click(object sender, EventArgs e)
{
    int result = await Calculate(1, 2);

    label1.Text = result.ToString();
}

private async Task<int> Calculate(int number1, int number2)
{
    return await Task.Run(() =>
    {
        Thread.Sleep(5000);
        return number1 + number2;
    });
}
Run Code Online (Sandbox Code Playgroud)

这段代码:

private async void button1_Click(object sender, EventArgs e)
{
    int result = await Calculate(1, 2);

    label1.Text = result.ToString();
}

private async Task<int> Calculate(int number1, int number2)
{
    await Task.Delay(5000);
    return number1 + number2;
}
Run Code Online (Sandbox Code Playgroud)

c#

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

如何验证异步在特定情况下没有效果?

在使用asyncand时await,有时我会遇到一个让我讨厌使用它的地方,因为我觉得它毫无意义。我还没有成功证明情况也是如此(而且,诚然,保留它不会损害性能)。我如何在以下示例中验证(或拒绝)我的主张。

bool empty = await Context.Stuff.AnyAsync();
if(empty)
  throw new Exception();
Run Code Online (Sandbox Code Playgroud)

我的主张是 - 由于我们立即使用检查结果来验证是否应该离开该方法,因此该调用需要同步启动。因此,我相信以下内容没有更差的表现。

bool empty = Context.Stuff.Any();
if(empty)
  throw new Exception();
Run Code Online (Sandbox Code Playgroud)

我如何验证我的主张(除了经验之外)?

c# async-await asp.net-core-6.0 .net-6.0

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

task.wait 、 Task.delay 和 thread.sleep 之间的区别

我想知道 Task.delay Task.Wait 和 Thread.sleep 之间的区别

当我们使用thread.sleep时。从睡眠中唤醒后,将创建一个新堆栈。请让我告诉我它们之间真正的区别是什么。

task-parallel-library c#-4.0

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