InjectFix
InjectFix copied to clipboard
为何不能直接使用await Task.Delay呢
public class TestPatch : MonoBehaviour
{
private void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
CallOneAsync("hello");
}
}
[Patch]
public async void CallOneAsync(string name)
{
Debug.Log(name);
await Task.Delay(1000);
Debug.Log("TestTask");
}
}
这样子写是不会等待一秒之后执行Debug.Log("TestTask"); 但是像下面这样操作的话就可以正常执行
public class TestPatch : MonoBehaviour
{
private void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
CallOneAsync("hello");
}
}
[Patch]
public async void CallOneAsync(string name)
{
Debug.Log(name);
await TestTask();
}
private async Task TestTask()
{
await Task.Delay(1000);
Debug.Log("TestTask");
}
}
我遇到了同样得问题,一旦遇到await,代码执行顺序就会错乱
不用Task,用UniTask.Delay()试试? await Task.Delay 默认是ConfigureAwait(true), 也就是等await完成后继续从调用时的上下文继续执行. 放在[Patch]里的方法是 自己实现的虚拟机的代码,不确定会不会有问题. UniTask应该强制就用UniTask的调度过程中执行了吧