[Unity] UniTaskBag
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public class UniTaskBag
{
private readonly Dictionary<CancellationToken, CancellationTokenSource> _tokenSources = new();
~UniTaskBag()
{
Dispose();
}
public CancellationToken CreateCancelToken()
{ var source = new CancellationTokenSource();
_tokenSources.Add(source.Token, source);
return source.Token;
}
public void Dispose()
{ _tokenSources.Foreach(pair =>
{
var source = pair.Value;
source.Cancel();
source.Dispose();
});
}
public void Dispose(CancellationToken token)
{ var source = _tokenSources[token];
source.Cancel();
source.Dispose();
_tokenSources.Remove(token);
}
}
사용 예시
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class Test : Monobehaviour
{
private UniTaskBag _uniTaskBag = new();
private void OnEnable()
{
FireAsync(_uniTaskBag.CreateCancelToken()).Forget();
TestAsync(_uniTaskBag.CreateCancelToken()).Forget();
var token = _uniTaskBag.CreateCancelToken();
Test2Async(token).Forget();
_uniTaskBag.Dispose(token);
}
private void OnDisable()
{
_uniTaskBag.Dispose();
}
...
}
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.