পদ্ধতি আর্গুমেন্ট হিসাবে একটি bool Foo (params []) পাস

এমন সময় আছে যে কোনও পদ্ধতিতে এটি বৈধ না হওয়া পর্যন্ত বেশ কয়েকবার চালানো প্রয়োজন। আমার ক্ষেত্রে এক্সক্লুসিভ যেমন bar.Name.Equals ("John Doe") যা আমি এই এক্সপ্রেশনটি বৈধভাবে চালাতে এবং রান করতে চাই।

কিছুটা এইরকম:

bool succeeded = TryUntillOk(bar.Name.Equals("John Doe"), 15, 100);

যেখানে TryUntillOk একটি পদ্ধতি যা প্রতিটি কল এর মধ্যে 100 সেকেন্ডের ঘুম দিয়ে 15 বার এই অভিব্যক্তিটি চালায়।

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

প্রশ্ন শিরোনাম গঠনমূলক নয়। এটি সম্পাদনা করতে বিনা দ্বিধায় :)

0
@ জর্জ ডুকেট ইয়েস এটা উল্লেখ না করার জন্য দুঃখিত।
যোগ লেখক Odys, উৎস
এটি একটি পৃথক থ্রেড মধ্যে চলমান হবে? অন্যথায় মূল্য পরিবর্তন করার জন্য কোন সুযোগ হতে যাচ্ছে না।
যোগ লেখক George Duckett, উৎস

3 উত্তর

আপনাকে আমন্ত্রণ গ্রহণ করতে হবে। @ জোনের জবাবটি লেব্বা বিনিময়, এই সংস্করণটি প্রতিনিধির তুলনায় আলাদা

using System;
using System.Threading;

namespace test
{
    class something
    {
        public String Name;
    }

    class Program
    {
        private delegate bool TryableFunction(String s);

        private static bool TryUntillOk(TryableFunction f, String s, int howoften, int sleepms)
        {
            while (howoften-->0)
            {
                if (f(s)) return true;
                Thread.Sleep(sleepms);
            }
            return false;
        }

        static void Main(string[] args)
        {
            something bar=new something();

            bar.Name="Jane Doe";
            bool succeeded = TryUntillOk(bar.Name.Equals,"John Doe", 15, 100);
            Console.WriteLine("Succeeded with '{0}': {1}",bar.Name,succeeded);

            bar.Name="John Doe";
            succeeded = TryUntillOk(bar.Name.Equals,"John Doe", 15, 100);
            Console.WriteLine("Succeeded with '{0}': {1}",bar.Name,succeeded);
        }


    }
}
0
যোগ
ঠিক এই ছিল আমার প্রথম প্রচেষ্টা। পরে আমি উপলব্ধি করলাম যে কল করার জন্য বেশ কিছু পদ্ধতি থাকতে পারে, যার অর্থ আমি অনেক প্রতিনিধিকে ঘোষণা করতে চেয়েছিলাম যা আমি এড়িয়ে চলতে চাই।
যোগ লেখক Odys, উৎস
... লাম্বা সংস্করণটি ঠিক কিসের!
যোগ লেখক Eugen Rieck, উৎস

আপনি সম্ভবত এরকম কিছু খুঁজছেন:

bool TryRepeatedly(Func condition, int maxRepeats, TimeSpan repeatInterval)
{
    for (var i = 0; i < maxRepeats; ++i)
    {
        if (condition()) return true;
        Thread.Sleep(repeatInterval);//or your choice of waiting mechanism
    }
    return false;
}

যা নিম্নলিখিত হিসাবে আহৃত হবে:

bool succeeded = TryRepeatedly(() => bar.Name.Equals("John Doe"),
                               15,
                               TimeSpan.FromMilliseconds(100));

The only interesting part here is that you specify the condition as a Func, which is a delegate to a method that takes no parameters and returns a boolean. Lambda expression syntax allows you to trivially construct such a delegate at the call site.

0
যোগ
@ জিওর্স ডেকেট এই কথা উল্লেখ না করে দুঃখিত। এই সব কর্মী থ্রেড মধ্যে সম্পন্ন হবে
যোগ লেখক Odys, উৎস
এটি সম্ভবত উল্লেখ করা উচিত যে এটি বহিরাগত কিছু (আলাদা থ্রেড ইত্যাদি) উপর নির্ভর করে যা অবশেষে সত্যের মূল্য নির্ধারণ করে।
যোগ লেখক George Duckett, উৎস

আপনি এটি চেক করতে পারেন

delegate void d_name(string s);

d_name obj =new d_name(bar.Name.Equals);

bool succeeded = TryUntillOk(obj("John Doe"), 15, 100);

TryUntillOk(obj d,type parameter2,type parameter3 )
{
  //do your work
}  
0
যোগ