Tencent / InjectFix

InjectFix is a hot-fix solution library for Unity
Other
1.97k stars 418 forks source link

为何不能直接使用await Task.Delay呢 #398

Open AskrYggdrasillsCR opened 1 year ago

AskrYggdrasillsCR commented 1 year ago
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");
    }
}
lishengru commented 1 year ago

我遇到了同样得问题,一旦遇到await,代码执行顺序就会错乱