我不太明白之间的差别Task.Wait和await.
我在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?时,为什么这不会导致问题?
目标是在按下按钮后将布尔变量保持在高状态 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) 我在Visual Studio 2008中用C#做这一切.
我想减慢算法的工作速度,以便用户可以观察它的工作.在GUI上可以看到周期性变化,所以我在每个实例后添加了"thread.sleep".
问题是"thread.sleep",当设置为至少一秒时,在"thread.sleep"的几个实例(在几个循环之后)之后简单地冻结整个GUI并保持这种方式直到程序完成.不是马上,但它总是发生.多久取决于睡眠的长短.
我有证据表明整个程序都没有冻结,它正在工作,即使睡眠正在暂停正确的长度.但是GUI会在某个时刻冻结,直到算法结束,此时它会显示正确的最终状态.
如何解决这个问题?在某些时候暂停算法的替代方案?
如何编写代码以在"for循环"结束时延迟,以便在通过下一个循环之前产生例如1毫秒的延迟?
我刚刚开始在团结中学习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)