আমি যা করতে চাই তা হল একটি সি # পদ্ধতি যখন ডাকা হয় তখন এটি কীভাবে কার্যকর করে, যাতে আমি এরকম কিছু লিখতে পারি:
[Distributed]
public DTask<bool> Solve(int n, DEvent<bool> callback)
{
for (int m = 2; m < n - 1; m += 1)
if (m % n == 0)
return false;
return true;
}
রান-টাইমে, আমাকে এমন পদ্ধতিগুলির বিশ্লেষণ করতে সক্ষম হতে হবে যেগুলিতে ডিস্ট্রিবিউট অ্যাট্রিবিউট রয়েছে (যা আমি ইতিমধ্যে করতে পারি) এবং তারপরে ফাংশনটির বডি কার্যকর হওয়ার আগে এবং ফাংশন রিটার্নের পরে কোড সন্নিবেশ করানো উচিত। আরও গুরুত্বপূর্ণভাবে, সলভ নামক কোডটি বা ফাংশনের শুরুতে (সংকলন সময়ে; রান-টাইমে এটি করা উদ্দেশ্য) আমি কোড পরিবর্তন না করেই এটি করতে সক্ষম হব need
এই মুহুর্তে আমি এই বিট কোডটি চেষ্টা করেছি (ধরুন টি হ'ল ধরণের সমাধান সলভ করা হয় এবং এমটি সমাধানের একটি মেথডইনফো) :
private void WrapMethod(Type t, MethodInfo m)
{
// Generate ILasm for delegate.
byte[] il = typeof(Dpm).GetMethod("ReplacedSolve").GetMethodBody().GetILAsByteArray();
// Pin the bytes in the garbage collection.
GCHandle h = GCHandle.Alloc((object)il, GCHandleType.Pinned);
IntPtr addr = h.AddrOfPinnedObject();
int size = il.Length;
// Swap the method.
MethodRental.SwapMethodBody(t, m.MetadataToken, addr, size, MethodRental.JitImmediate);
}
public DTask<bool> ReplacedSolve(int n, DEvent<bool> callback)
{
Console.WriteLine("This was executed instead!");
return true;
}
তবে মেথোডেন্টাল.সপাপথথডবডি কেবল গতিশীল মডিউলগুলিতে কাজ করে; যাঁরা ইতিমধ্যে সংঘবদ্ধ করে সংঘবদ্ধ করে রেখেছেন
সুতরাং আমি ইতিমধ্যে লোডড এবং এক্সিকিউটিভ অ্যাসেমব্লিতে সংরক্ষিত একটি পদ্ধতিতে স্ব্যাপমেথডবডি কার্যকরভাবে করার একটি উপায় অনুসন্ধান করছি ।
দ্রষ্টব্য, আমি যদি কোনও পদ্ধতিটি ডায়নামিক মডিউলে পুরোপুরি অনুলিপি করতে হয় তবে এটি কোনও সমস্যা নয় তবে এই ক্ষেত্রে আমাকে আইএল জুড়ে অনুলিপি করার পাশাপাশি সলভের () কলগুলিতে সমস্ত আপডেট করার দরকার রয়েছে যাতে তারা এরকম হয় নতুন অনুলিপি নির্দেশ করবে।