আমি কোথায় ল্যাম্বডা এক্সপ্রেশন 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.