在unity中使用Unitask 但要求支持回调函数传入
时间: 2023-06-18 08:02:57 浏览: 222
安卓端安装Apk及安装完成回调AAR插件包(新)
在Unity中使用Unitask,并支持回调函数传入,可以通过以下步骤实现:
1. 在你的项目中安装Unitask。你可以通过Nuget来进行安装,或者将Unitask的源代码手动添加到你的项目中。
2. 创建一个自定义的TaskCompletionSource类来包装Unitask,并支持回调函数传入。这个类需要实现ITaskCompletionSource接口,同时也要包含一个回调函数的委托属性。
```csharp
public class MyTaskCompletionSource<TResult> : ITaskCompletionSource<TResult>
{
private TaskCompletionSource<TResult> _tcs = new TaskCompletionSource<TResult>();
private Action<TResult> _callback;
public Task<TResult> Task => _tcs.Task;
public void SetResult(TResult result)
{
_tcs.SetResult(result);
_callback?.Invoke(result);
}
public void SetException(Exception exception)
{
_tcs.SetException(exception);
}
public void SetCanceled()
{
_tcs.SetCanceled();
}
public void OnCompleted(Action<TResult> continuation)
{
_callback = continuation;
}
}
```
3. 在你的代码中使用自定义的TaskCompletionSource类来包装Unitask。你可以在需要使用回调函数的地方,将回调函数的委托传递给TaskCompletionSource类的OnCompleted方法。
```csharp
public async void MyMethod(Action<int> callback)
{
MyTaskCompletionSource<int> tcs = new MyTaskCompletionSource<int>();
tcs.OnCompleted(callback);
int result = await UniTask.Run(() =>
{
// Do some work...
return 42;
});
tcs.SetResult(result);
}
```
在上面的代码中,我们创建了一个MyMethod方法,它需要一个回调函数作为参数。我们使用自定义的TaskCompletionSource类来包装了一个UniTask,同时也将回调函数的委托传递给了TaskCompletionSource类的OnCompleted方法。在UniTask完成后,我们调用了TaskCompletionSource类的SetResult方法来设置结果,并在回调函数中调用了委托。
阅读全文