۱۴۰۴/۰۷/۰۹
۱. LINQ و Deferred Execution
۱.۱ LINQ چیست؟
- LINQ (Language Integrated Query) امکان نوشتن query روی مجموعهها را به صورت نوع امن (type-safe) و خوانا فراهم میکند.
- مثال: query روی
List<T>،ArrayیاIQueryable<T>.
int[] numbers = { 1, 2, 3, 4, 5 };
var evenNumbers = numbers.Where(n => n % 2 == 0);
۱.۲ Deferred Execution
- Deferred Execution یعنی query تا زمانی که واقعاً نتایج مصرف نشوند (enumerate) اجرا نمیشود.
- این باعث میشود query تنظیم و بهینهتر باشد و فقط وقتی داده نیاز شود، اجرا شود.
مثال:
int[] numbers = { 1, 2, 3, 4, 5 };
var query = numbers.Where(n => n > 2); // هنوز اجرا نشده
numbers[4] = 100; // تغییر روی مجموعه اصلی
foreach (var n in query)
{
Console.WriteLine(n); // اجرا اینجا اتفاق میافتد → خروجی: 3,4,100
}
نکته: اگر بخواهیم query بلافاصله اجرا شود و نتایج ذخیره شود، از
ToList()یاToArray()استفاده میکنیم:
var list = numbers.Where(n => n > 2).ToList(); // فورس اجرا
۲. Collections و Thread-Safety
۲.۱ Collections معمولی
List<T>وDictionary<K,V>:- Thread-safe نیستند → اگر چند thread همزمان تغییر دهند ممکن است خطا رخ دهد یا داده خراب شود.
- مناسب برنامههای تکنخی (single-thread) یا اگر خودت lock بگذاری.
مثال:
List<int> list = new List<int>();
Parallel.For(0, 10, i => list.Add(i)); // ممکن است crash یا نتیجه نادرست
۲.۲ Collections Thread-safe
- C# مجموعههای ویژهای برای محیطهای چند نخ دارد:
- ConcurrentDictionary<K,V> → dictionary امن برای چند thread
- ConcurrentBag<T> → مجموعه بدون ترتیب، امن برای چند thread
- ConcurrentQueue/Stack → صف و پشته thread-safe
مثال ConcurrentDictionary:
using System.Collections.Concurrent;
ConcurrentDictionary<int, string> dict = new ConcurrentDictionary<int, string>();
Parallel.For(0, 10, i => dict.TryAdd(i, $"Value {i}"));
Console.WriteLine(dict.Count); // همیشه درست است، thread-safe
۳. جمعبندی نکات مهم آزمونی
| نکته | توضیح |
|---|---|
| LINQ | نوشتن query روی مجموعهها، نوع امن و خوانا |
| Deferred Execution | query تا زمان enumerate اجرا نمیشود، برای فورس اجرا از ToList()/ToArray() استفاده میکنیم |
| List<T> / Dictionary<K,V> | Thread-safe نیستند → نیاز به lock در چند thread |
| ConcurrentDictionary / ConcurrentBag | thread-safe هستند، مناسب برنامه چند نخ |
✅ نکات تستی معمول:
- سوال درباره Deferred Execution و اینکه query کی اجرا میشود.
- سوال درباره کدام collection thread-safe است.
- سوال درباره ToList() برای فورس اجرا.
Accept Cookies
[your-shortcode]