আমি একটি পরামর্শদাতার দ্বারা লিখিত কিছু কোড পর্যালোচনা করছি, এবং কয়েক ডজন লাল পতাকা ইতিমধ্যে পপ আপ হয়ে গেছে, আমি নিম্নলিখিত স্নিপেটের চারপাশে আমার মাথাটি গুটিয়ে রাখতে পারি না:
private void foo()
{
if (InvokeRequired)
{
lock (new object())
{
if (m_bar!= null)
Invoke(new fooDelegate(foo), new object[] { });
}
}
else
{
if(OnBazChanged != null)
OnBazChanged();
}
}
লক (নতুন অবজেক্ট ()) এখানে কী করছে? এটি সর্বদা অন্য কোনও অবজেক্টে লক করা যেমন রয়েছে তেমন কোনও প্রভাব ফেলতে হবে না, তবে এই জাতীয় লকিং পুরো কোড জুড়েই অবিরত থাকে, এমনকি অনুলিপি-এবং-আটকানো অংশগুলিতেও। সি # ভাষায় এটি কি এমন কোনও বিশেষ কেস যা আমি জানিনা এমন কিছু সংকলিত হয়েছে, বা প্রোগ্রামারটি কিছু সময় আগে কাজ করার জন্য ঘটেছে এমন কোনও কার্গো কাল্টকে কেবল গ্রহণ করেছে?
new object()
কোনও ক্ষেত্রটি সংরক্ষণ করা হয়েছিল, এবং সেই ক্ষেত্রটিlock()
বিবৃতিতে ব্যবহৃত হয়েছিল এবং তারা এটিকে ইনলাইন না করা ভাল জানত না।