相关疑难解决方法(0)

await vs Task.Wait - 死锁?

我不太明白之间的差别Task.Waitawait.

我在ASP.NET WebAPI服务中有类似于以下函数:

public class TestController : ApiController
{
    public static async Task<string> Foo()
    {
        await Task.Delay(1).ConfigureAwait(false);
        return "";
    }

    public async static Task<string> Bar()
    {
        return await Foo();
    }

    public async static Task<string> Ros()
    {
        return await Bar();
    }

    // GET api/test
    public IEnumerable<string> Get()
    {
        Task.WaitAll(Enumerable.Range(0, 10).Select(x => Ros()).ToArray());

        return new string[] { "value1", "value2" }; // This will never execute
    }
}
Run Code Online (Sandbox Code Playgroud)

哪里Get会僵局.

什么可能导致这个?当我使用阻塞等待而不是await Task.Delay?时,为什么这不会导致问题?

c# deadlock task-parallel-library async-await

169
推荐指数
3
解决办法
13万
查看次数

在winforms C#中按下按钮后如何保持布尔变量高2秒

目标是在按下按钮后将布尔变量保持在高状态 2 秒。

当 Mouse_Down 事件被触发时,变量应该处于高状态。在 MouseUp 事件被触发后,该变量在接下来的 2 秒内也应该是高的。所以基本上我想在这两个事件之间创建一个延迟。

有没有办法做到这一点?

bool variable;

private void button1_MouseDown(object sender, EventArgs e)
{
   variable = true; // This variable should be true for 2 seconds after mouseUp event is fired.
}

private void button1_MouseUp(object sender, EventArgs e)
{
   variable = False;
}
Run Code Online (Sandbox Code Playgroud)

c# visual-studio winforms

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

C# - Thread.Sleep的替代方案?

我在Visual Studio 2008中用C#做这一切.

我想减慢算法的工作速度,以便用户可以观察它的工作.在GUI上可以看到周期性变化,所以我在每个实例后添加了"thread.sleep".

问题是"thread.sleep",当设置为至少一秒时,在"thread.sleep"的几个实例(在几个循环之后)之后简单地冻结整个GUI并保持这种方式直到程序完成.不是马上,但它总是发生.多久取决于睡眠的长短.

我有证据表明整个程序都没有冻结,它正在工作,即使睡眠正在暂停正确的长度.但是GUI会在某个时刻冻结,直到算法结束,此时它会显示正确的最终状态.

如何解决这个问题?在某些时候暂停算法的替代方案?

c# visual-studio-2008 slowdown

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

如何在"for循环"中延迟?

如何编写代码以在"for循环"结束时延迟,以便在通过下一个循环之前产生例如1毫秒的延迟?

c# loops for-loop delay

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

如何在Unity3D中使用C#延迟?

我刚刚开始在团结中学习c#.我按照教程,但我想添加一些东西.

using UnityEngine;
using UnityEngine.UI;
using System.Collections;

public class PlayerController : MonoBehaviour {

    public float speed;
    public Text countText;
    public Text winText;

    private Rigidbody rb;
    private int count;

    void Start ()
    {
        rb = GetComponent<Rigidbody>();
        count = 0;
        SetCountText ();
        winText.text = "";
    }

    void FixedUpdate ()
    {
        float moveHorizontal = Input.GetAxis ("Horizontal");
        float moveVertical = Input.GetAxis ("Vertical");

        Vector3 movement = new Vector3 (moveHorizontal, 0.0f, moveVertical);

        rb.AddForce (movement * speed);
    }

    void OnTriggerEnter(Collider other) 
    {
        if (other.gameObject.CompareTag ( "Pick Up")) …
Run Code Online (Sandbox Code Playgroud)

c# unity-game-engine

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