public CallbackInfo(IDelegateAction callback, Vector3 pos, Vector3 forward, GameObject parent) { this.callback = callback; this.pos = pos; this.forward = forward; this.parent = parent; }
// Update is called once per frame void Update() { Debug.Log("===================BetterDelegate Callback==================="); Profiler.BeginSample("BetterDelegate Callback"); for (int i = 0; i < (isTestingCorrectness ? 10 : 10000); i++) { if (i % 3 == 0) { IDelegateAction bDelegate = BetterDelegate.GetAction(mDel1, inputNames[i], i); bDelegate.Invoke((object)outputNames[i], 1111); } else { IDelegateAction bDelegate = BetterDelegate.GetAction(mDel2, (object)inputNames[i], i, inputNames[i]); bDelegate.Invoke((object)outputNames[i], 2222, outputNames[i]); } } Profiler.EndSample(); Debug.Log("===================Directly Call==================="); Profiler.BeginSample("Directly Call"); for (int i = 0; i < (isTestingCorrectness ? 10 : 10000); i++) { if (i % 3 == 0) { TestCallback(outputNames[i], 1111, inputNames[i], i); } else { TestCallback(outputNames[i], 2222, outputNames[i], inputNames[i], i, inputNames[i]); } } Profiler.EndSample(); Debug.Log("===================Cache Delegate Genericity Callback==================="); Profiler.BeginSample("Cache Delegate Genericity Callback"); for (int i = 0; i < (isTestingCorrectness ? 10 : 10000); i++) { if (i % 3 == 0) { TestDe(mDel1, outputNames[i], 1111, inputNames[i], i); } else { TestDe(mDel2, outputNames[i], 2222, outputNames[i], inputNames[i], i, inputNames[i]); } } Profiler.EndSample(); Debug.Log("===================Cache Delegate Function Callback==================="); Profiler.BeginSample("Cache Delegate Function Callback"); for (int i = 0; i < (isTestingCorrectness ? 10 : 10000); i++) { if (i % 3 == 0) { TestDeCall(mDel1, outputNames[i], 1111, inputNames[i], i); } else { TestDeCall(mDel2, outputNames[i], 2222, outputNames[i], inputNames[i], i, inputNames[i]); } } Profiler.EndSample(); Debug.Log("===================No Cache Delegate Genericity Callback==================="); Profiler.BeginSample("No Cache Delegate Genericity Callback"); for (int i = 0; i < (isTestingCorrectness ? 10 : 10000); i++) { if (i % 3 == 0) { TestDe(TestCallback, outputNames[i], 1111, inputNames[i], i); } else { TestDe(TestCallback, outputNames[i], 2222, outputNames[i], inputNames[i], i, inputNames[i]); } } Profiler.EndSample(); if (callNum < 10) { callNum++; Debug.Log("===================Test async conrrectness==================="); CallbackInfo callbackInfo = default(CallbackInfo); callbackInfo.forward = new Vector3(callNum, callNum, callNum); IDelegateAction btDelegate = BetterDelegate.GetAction(mDel3, callbackInfo, "inTestString"); testClass.InvokeDelegate(btDelegate); // 用协程模拟异步 StartCoroutine("InvokeTrigger"); } else if (callNum < 20) { callNum++; Debug.Log("===================Test thread conrrectness==================="); CallbackInfo callbackInfo = default(CallbackInfo); callbackInfo.forward = new Vector3(callNum, callNum, callNum); IDelegateAction btDelegate = BetterDelegate.GetAction(mDel3, callbackInfo, "inTestString"); invokeQueue.Enqueue(btDelegate); } else { // 启动子线程,测试回调 threadStart = true; } }
public void InvokeDelegate(IDelegateAction delFun) { invokeQueue.Enqueue(delFun); }