포스트

[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 라이센스를 따릅니다.