KO CSharp Concurrency - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki

Π£ΠΊΡ€Π°Ρ—Π½ΡΡŒΠΊΠ° Β· Русский Β· English Β· Deutsch Β· FranΓ§ais Β· Italiano Β· EspaΓ±ol Β· 繁體中文 Β· ζ—₯本θͺž Β· ν•œκ΅­μ–΄

μŠ€λ ˆλ“œ, μž‘μ—… 및 동기화

μ„€λͺ…μ„œ C# Β· μ˜ˆμ‹œ UO

비동기성을 μ‚¬μš©ν•˜λ©΄ 기닀릴 수 있고, λ™μ‹œμ„±μ„ μ‚¬μš©ν•˜λ©΄ μ—¬λŸ¬ μž‘μ—…μ„ μ²˜λ¦¬ν•  수 있으며, 병렬성을 μ‚¬μš©ν•˜λ©΄ μ—¬λŸ¬ μž‘μ—…μ„ λ™μ‹œμ— μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. Task.Run 계산 μž‘μ—…μ— μ ν•©ν•©λ‹ˆλ‹€. κ·Έ μžμ²΄λ‘œλŠ” κ²Œμž„ 개체λ₯Ό μŠ€λ ˆλ“œλ‘œλΆ€ν„° μ•ˆμ „ν•˜κ²Œ λ§Œλ“€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. UI 및 κ²Œμž„ μ„Έκ³„λŠ” 제곡된 API ν˜ΈμŠ€νŠΈμ— μ˜ν•΄ μ œκ³΅λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.

κ°„λ‹¨ν•œ 예제 (Example.cs)

이 예제λ₯Ό Example.cs둜 λ”°λ‘œ μ €μž₯ν•˜κ³  이 νŽ˜μ΄μ§€μ˜ λ‹€λ₯Έ μ˜ˆμ œμ™€ λ…λ¦½μ μœΌλ‘œ μ‹€ν–‰ν•˜μ„Έμš”.

Example.cs:

// PROJECT-EXAMPLE
int count = 0;
System.Threading.Tasks.Parallel.For(0, 3, _ => System.Threading.Interlocked.Increment(ref count));
System.Console.WriteLine(count);

κ²°κ³Ό:

3
int total = await Task.Run(() => Enumerable.Range(1, 100).Sum(), Cancellation);
UO.Print(total.ToString());
using System.Collections.Concurrent;
var values = new ConcurrentDictionary<string, int>();
values.TryAdd("items", 1);
values.AddOrUpdate("items", 1, (_, old) => old + 1);
UO.Print(values["items"].ToString());

lockλŠ” 동기 μ„Ήμ…˜μ„ λ³΄ν˜Έν•˜κ³ , SemaphoreSlim.WaitAsync - μ•‘μ„ΈμŠ€λ₯Ό μœ„ν•œ 비동기 λŒ€κΈ°, Interlocked - κ°œλ³„ μ›μž μž‘μ—…μ„ λ³΄ν˜Έν•©λ‹ˆλ‹€. κΈ΄ μ™ΈλΆ€ μž‘μ—… μ€‘μ—λŠ” μž κΈˆμ„ μœ μ§€ν•˜μ§€ 말고 μŠ€ν¬λ¦½νŠΈκ°€ μ™„λ£Œλœ ν›„ μ„Έμ…˜μ— μ•‘μ„ΈμŠ€ν•˜λŠ” μžŠμ–΄λ²„λ¦° μž‘μ—…μ„ μ‹€ν–‰ν•˜μ§€ λ§ˆμ„Έμš”.

곡식 λ¬Έμ„œ: μŠ€λ ˆλ“œ, μž‘μ—… 및 동기화 - Microsoft Learn.