কীভাবে রিস্যাশ্পটি অ্যাসিঙ্ক / অপেক্ষার সাথে ব্যবহার করবেন


103

আমি RestSharp ব্যবহার করে কিছু অ্যাসিঙ্ক্রোনাস সি # কোড একটি আধুনিক উদাহরণ খুঁজে পাওয়া সংগ্রাম করছি asyncএবং await। আমি জানি হ্যাকের সাম্প্রতিক আপডেট হয়েছে তবে নতুন পদ্ধতিগুলি কীভাবে ব্যবহার করতে হয় তা আমি জানি না।

এছাড়াও, আমি কীভাবে বাতিলকরণ টোকন সরবরাহ করতে পারি যাতে অপারেশন বাতিল হতে পারে (বলুন, যদি কোনও ব্যক্তি অপেক্ষা করতে অসুস্থ হয় এবং অ্যাপ্লিকেশনটির ইউআইতে বাতিল বোতাম টিপায়)।

উত্তর:


202

ঠিক আছে, হ্যাক আপডেটটি উল্লেখ করছেন যা আমার দ্বারা তৈরি করা হয়েছে :) সুতরাং এটি কীভাবে ব্যবহার করতে হয় তা আমাকে আপনাকে দেখাতে দিন, কারণ এটি আসলে খুব সহজ। পূর্বে আপনার কাছে এমন পদ্ধতি ছিল ExecuteAsyncGetযার নাম অনুসারে একটি রেস্টশার্প কাস্টম টাইপ ফিরে আসবে RestRequestAsyncHandle। এই ধরণের async/awaitকাজ TaskTask<T>প্রত্যাবর্তনের ধরণের জন্য অপেক্ষা করা যায়নি । আমার টান-অনুরোধ বিদ্যমান অ্যাসিঙ্ক পদ্ধতিতে ওভারলোডগুলি যুক্ত করেছে যা Task<T>দৃষ্টান্তগুলি ফিরে আসে । এই Task<T>ওভারলোডগুলি তাদের নামের সাথে একটি "টাস্ক" স্ট্রিং যুক্ত করেছে, উদাহরণস্বরূপ Task<T>ওভারলোডের জন্য ExecuteAsyncGetডাকা হয় ExecuteGetTaskAsync<T>। নতুন Task<T>ওভারলোডগুলির প্রত্যেকটির জন্য একটি পদ্ধতি রয়েছে যা CancellationTokenনির্দিষ্ট করার প্রয়োজন হয় না এবং এটির একটিও রয়েছে।

সুতরাং এখন এটি কীভাবে ব্যবহার করতে হয় তার একটি প্রকৃত উদাহরণের দিকে, যা কীভাবে ব্যবহার করতে হবে তাও দেখায় CancellationToken:

private static async void Main()
{
    var client = new RestClient();
    var request = new RestRequest("http://www.google.com");
    var cancellationTokenSource = new CancellationTokenSource();

    var restResponse = 
        await client.ExecuteTaskAsync(request, cancellationTokenSource.Token);

    // Will output the HTML contents of the requested page
    Console.WriteLine(restResponse.Content); 
}

এটি ExecuteTaskAsyncওভারলোডটি ব্যবহার করবে যা কোনও Task<IRestResponse>উদাহরণ দেয় returns এটি কোনও ফেরত দেওয়ার সাথে সাথে Taskআপনি awaitএই পদ্ধতিতে কীওয়ার্ডটি ব্যবহার করতে পারেন এবং ফিরে আসা Task<T>প্রকারটি ফিরে পেতে পারেন (এই ক্ষেত্রেIRestResponse ) ।

আপনি কোডটি এখানে খুঁজে পেতে পারেন: http://dotnetfiddle.net/tDtKbL


আহ! আমি মনে করি আমি: হৃদয়: আপনি !! (এবং এটি খুব ভাল, এটি ভ্যালেন্টাইনস দিবস বিবেচনা করে)। রেস্টশার্প উইকিতে এটি যোগ করা খুব সুন্দর হবে। ঠিক আছে, তাই .. কোন পিসিএল এর কোন সুযোগ আছে, এছাড়াও? নাকি আমি আমার ভাগ্যকে চাপ দিচ্ছি?
বিশুদ্ধ.ক্রোম

আমি নিশ্চিত নই যে এর কোনও পিসিএল সংস্করণ কাজ করবে কিনা তবে আমি ভবিষ্যতে এটি সন্ধান করব। এবং আমি সম্মত হই যে উইকিতে যুক্ত হওয়া ভাল হবে, জানেন না যে আমাকে এটি সম্পাদনা করার অনুমতি দেওয়া হয়েছে (আমি লাইব্রেরির নিয়মিত রক্ষণাবেক্ষণকারী নই)।
এরিক শিয়েরবুম

সম্ভবত আমরা টুইটারে @ হ্যাকড কনভোতে যেতে পারি?
বিশুদ্ধ.ক্রোম

3
আমি কীভাবে আমার কাস্টম IRestResponse বাস্তবায়ন মানচিত্র করতে পারি?
jpgrassi

2
যেহেতু আমি সর্বশেষে একই সময়ে কাঁধের প্যাডগুলি প্রচলিত ছিল প্রায় রেশসার্প ব্যবহার করেছি, রোটারি ফোনগুলি ছিল আদর্শ এবং আমরা সকলেই আমাদের রোবোটিক্স 14.4k মডেমের মাধ্যমে আমাদের ফেবি বিবিএসকে আঘাত করতে পছন্দ করি। উত্তর-অনুমোদনের সবুজ টিক, আমি করব।
বিশুদ্ধ.ক্রোম

3

আমার ক্ষেত্রে, এটি সঠিকভাবে কাজ করার জন্য আমাকে টাস্ক.ওয়েট () কল করতে হয়েছিল। তবে, আমি এমন সংস্করণ ব্যবহার করেছি যা বাতিলকরণ টোকেনসোর্সটিকে প্যারামিটার হিসাবে গ্রহণ করে না।

private static async void Main()
{
    var client = new RestClient();
    var request = new RestRequest("http://www.google.com");
    Task<IRestResponse> t = client.ExecuteTaskAsync(request);
    t.Wait();
    var restResponse = await t;
    Console.WriteLine(restResponse.Content); // Will output the HTML contents of the requested page
}

9
Waitআপনি অ্যাসিঙ্ক কোডটি উত্সাহিত করছেন না তা ব্যবহার করে আপনি কেবল এটি সমকালীনভাবে চালাচ্ছেন।
মাফিন ম্যান

আমার ক্ষেত্রে এক্সিকিউটিটাস্কসিনঙ্ক কল করা (বাতিলকরণ টোকেন সহ বা ছাড়া) ফিরে আসে না এবং আইআইএসকে দায়িত্বজ্ঞানহীন করে না। কারণটি না পাওয়া পর্যন্ত আমাকে এই হ্যাকটি ব্যবহার করতে হয়েছিল।
অ্যালেক্স 75

যদি আপনি অপেক্ষা করেন তবে কেন আপনি কেবল কলটির সিঙ্ক সংস্করণটি ব্যবহার করবেন না ... অর্থহীন
এগলি বেসেরা 0

1
আপনি থ্রেডটি অন্য কোথাও ব্যবহার করার জন্য মুক্ত করছেন না? অপর প্রান্তে দীর্ঘকাল ধরে চলমান অপারেশনে এটি উপকারী, না?
বেনম্যাক্যালাম

হ্যাঁ, আউটপুট এসেছিল, উত্তরটি বৈধ কিনা, আমি কি অ্যাসিঙ্ক অপারেশন অর্জন করছি।
প্রিন্স অ্যান্টনি জি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.