আমি কোথায় ল্যাম্বডা এক্সপ্রেশন async চিহ্নিত করব?


215

আমি এই কোড পেয়েছি:

private async void ContextMenuForGroupRightTapped(object sender, RightTappedRoutedEventArgs args)
{
    CheckBox ckbx = null;
    if (sender is CheckBox)
    {
        ckbx = sender as CheckBox;
    }
    if (null == ckbx)
    {
        return;
    }
    string groupName = ckbx.Content.ToString();

    var contextMenu = new PopupMenu();

    // Add a command to edit the current Group
    contextMenu.Commands.Add(new UICommand("Edit this Group", (contextMenuCmd) =>
    {
        Frame.Navigate(typeof(LocationGroupCreator), groupName);
    }));

    // Add a command to delete the current Group
    contextMenu.Commands.Add(new UICommand("Delete this Group", (contextMenuCmd) =>
    {
        SQLiteUtils slu = new SQLiteUtils();
        slu.DeleteGroupAsync(groupName); // this line raises Resharper's hackles, but appending await raises err msg. Where should the "async" be?
    }));

    // Show the context menu at the position the image was right-clicked
    await contextMenu.ShowAsync(args.GetPosition(this));
}

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

এবং তাই, আমি এটিতে একটি "অপেক্ষা" প্রেন্ডেন্ট করেছিলাম তবে অবশ্যই, আমার তখন কোথাও একটি "অ্যাসিঙ্ক" যুক্ত করা দরকার - তবে কোথায়?



1
@ সমসারা: ভাল লাগল, অবাক হয়েছি যখন তারা শেষ পর্যন্ত ডকুমেন্ট করে সি # স্পপের বাইরে কোথাও। আইআইআরসি, এই প্রশ্ন জিজ্ঞাসা করার সময় কোনও ডকুমেন্টেশন উপস্থিত ছিল না।
— BoltClock

উত্তর:


365

একটি ল্যাম্বডা অ্যাসিঙ্ক চিহ্নিত করতে, কেবলমাত্র asyncতার যুক্তি তালিকার আগেই পূর্বে চাপ দিন :

// Add a command to delete the current Group
contextMenu.Commands.Add(new UICommand("Delete this Group", async (contextMenuCmd) =>
{
    SQLiteUtils slu = new SQLiteUtils();
    await slu.DeleteGroupAsync(groupName);
}));

ভিজ্যুয়াল স্টুডিও থেকে আমি একটি ত্রুটি পেয়েছি যে অ্যাসিঙ্ক শূন্য পদ্ধতিগুলি সমর্থিত নয়।
— কেভিন বার্টন

@ কেভিন বার্টন: হ্যাঁ, অ্যাসিঙ্ক ভয়েডগুলি কেবল ইভেন্ট হ্যান্ডলারদের মধ্যেই সীমাবদ্ধ থাকে। আপনি যে এপিআইটি ব্যবহার করছেন তা হয় অ্যাসিঙ্ক নয় বা এর পরিবর্তে অ্যাসিঙ্ক টাস্ক ল্যাম্বদা প্রত্যাশা করে এমন একটি এসিএন সংস্করণ রয়েছে।
— বোল্টক্লক

22

এবং আপনারা যারা বেনামে প্রকাশ করছেন তাদের জন্য:

await Task.Run(async () =>
{
   SQLLiteUtils slu = new SQLiteUtils();
   await slu.DeleteGroupAsync(groupname);
});
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.