সত্ত্বা ফ্রেমওয়ার্কে মাল্টি-অ্যাসিঙ্ক 6?


87

এটি আমার কোড:

var banner = context.Banners.ToListAsync()
var newsGroup = context.NewsGroups.ToListAsync()
await Task.WhenAll(banner, newsGroup);

কিন্তু যখন আমি কন্ট্রোলার থেকে ফাংশন কল। এটি ত্রুটি দেখিয়েছে

পূর্ববর্তী অ্যাসিনক্রোনাস অপারেশন শেষ হওয়ার আগে এই প্রসঙ্গে দ্বিতীয় অপারেশন শুরু হয়েছিল। এই প্রসঙ্গে অন্য কোনও পদ্ধতি কল করার আগে কোনও অ্যাসিনক্রোনাস অপারেশন সম্পন্ন হয়েছে তা নিশ্চিত করতে 'অপেক্ষা করুন' ব্যবহার করুন। কোনও উদাহরণ সদস্যদের থ্রেড নিরাপদ থাকার গ্যারান্টি নেই।

দয়া করে এই সমস্যাটি সমাধান করতে আমাকে সহায়তা করুন।


আমার 2 টি কাজ আছে। আমি যদি প্রতিটি কাজ চালাতে। এটা সাফল্য। তবে আমি যদি আমার কোডটির মতো উপরে চলে যাই এটি ত্রুটি
একটি এইচভি

উত্তর:


119

ব্যতিক্রমটি স্পষ্টভাবে ব্যাখ্যা করে যে একবারে প্রসঙ্গে প্রতি মাত্র একটি অ্যাসিনক্রোনাস অপারেশন রয়েছে।

সুতরাং, awaitত্রুটি বার্তার পরামর্শ অনুসারে আপনার কাছে হয় তাদের একবারে:

var banner = await context.Banners.ToListAsync();
var newsGroup = await context.NewsGroups.ToListAsync();

অথবা আপনি একাধিক প্রসঙ্গ ব্যবহার করতে পারেন:

var banner = context1.Banners.ToListAsync();
var newsGroup = context2.NewsGroups.ToListAsync();
await Task.WhenAll(banner, newsGroup);

35
কেবলমাত্র একটি নোট, যদি আপনার একটি অলস ভেরিয়েবল থাকে যা ক্যোয়ারীতে প্রসঙ্গটি ব্যবহারের অপেক্ষাও করে থাকে তবে এটি একই ত্রুটিটি ফেলে দেবে, কোয়েরির আগে সম্পত্তিটি পেয়ে যাবে, এটি খুঁজে বেদনা পেতে ব্যথা হয়েছিল।
পেড্রো.ও.কিড

7
@ পেড্রো। দ্য কিড: একটি সাধারণ নিয়ম হিসাবে, অ্যাসিনক্রোনাস ডিবি অ্যাক্সেস সহ অলস লোডিং ব্যবহার করবেন না। অলস লোডিং সর্বদা সমকালীন হয়, তাই অতিরিক্ত ডেটার জন্য অন্তর্ভুক্ত বা পৃথক ক্যোয়ারী ব্যবহার করা আরও ভাল।
স্টিফেন ক্লিয়ারি

4
এসাইক-এর ক্যোয়ারী অনুসারে আপনার প্রসঙ্গের প্রয়োজনের কোনও নির্দিষ্ট কারণ আছে কি? আমি মনে করি এটি সীমিত ফ্যাক্টরের বেশ কিছুটা হয়ে যায়।
Zapnologica

4
@ জাপানোলজিকা: ইএস 6 ডিজাইনের ঠিক এটি। প্রতিটি প্রসঙ্গ একবারে একটি করে ক্যোয়ারি পরিচালনা করতে পারে । সুতরাং আপনি যদি পরবর্তী একটিটি শুরু হওয়ার আগে একটি প্রশ্ন শেষ করেন, আপনার কেবল একটি প্রসঙ্গ প্রয়োজন। আপনি যদি একই সাথে একাধিক প্রশ্ন করতে চান তবে এটি কেবল একটি সমস্যা।
স্টিফেন ক্লিয়ারি

@ স্টেফেনক্রিয়ারি, ব্যতিক্রমের সাথে সাথে আমার কিছু নেই বলেই আমার এই ক্যোয়ারীটি খুঁজে পেতে খুব কষ্ট হচ্ছে। বর্তমানে মৃত্যুদন্ড কার্যকর করা হচ্ছে কি তা খুঁজে পাওয়ার কোনও উপায় আছে? ধন্যবাদ
ফ্যাবিও মিলহিরো

4

আপনি যদি আপনার ডেটা সরবরাহকারীর ইনজেকশনের জন্য আইওসি ধারক ব্যবহার করছেন তবে আপনার জীবনচক্রের জন্য "ক্ষণস্থায়ী" বা "পেরভেব্রেকয়েস্ট" প্রকারটি ব্যবহার করার বিষয়টি বিবেচনা করুন।

উদাহরণস্বরূপ: https://github.com/castleproject/Windsor/blob/master/docs/lLiveyles.md


3

উদাহরণস্বরূপ সংগ্রহস্থল প্যাটার্নের সাথে নির্ভরতা ইনজেকশনের জন্য আপনি যদি ইউনিটি ব্যবহার করেন তবে আপনি তৈরি / আপডেট / মুছতে দুটি বা আরও বেশি প্রসঙ্গ ব্যবহার করে নিম্নলিখিত ত্রুটিটি পাবেন:

দুটি অবজেক্টের মধ্যে সম্পর্কের সংজ্ঞা দেওয়া যায় না কারণ তারা বিভিন্ন অবজেক্ট কনটেক্সট অবজেক্টের সাথে সংযুক্ত রয়েছে।

এটি ব্যবহার করে সমাধান করা যেতে পারে PerRequestLifetimeManager। এখানে আরও তথ্য:

সি # EF6 Unক্য - Asp.Net Web Api ব্যবহার করে একটি প্রসঙ্গে একাধিক async কল করুন

container.RegisterType<DbContext>(new PerRequestLifetimeManager());
container.RegisterType<ISupplierRepository, SupplierRepository>();
container.RegisterType<IContactRepository, ContactRepository>();
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.