public BookmarkResumptionResult TryGenerateWorkItem(ActivityExecutor executor, bool isExternal, ref Bookmark bookmark, object value, ActivityInstance isolationInstance, out ActivityExecutionWorkItem workItem) { Bookmark internalBookmark = null; BookmarkCallbackWrapper callbackWrapper = null; if (!this.TryGetBookmarkFromInternalList(bookmark, out internalBookmark, out callbackWrapper)) { workItem = null; return(BookmarkResumptionResult.NotFound); } bookmark = internalBookmark; if (!ActivityUtilities.IsInScope(callbackWrapper.ActivityInstance, isolationInstance)) { workItem = null; // We know about the bookmark, but we can't resume it yet return(BookmarkResumptionResult.NotReady); } workItem = callbackWrapper.CreateWorkItem(executor, isExternal, bookmark, value); if (!BookmarkOptionsHelper.SupportsMultipleResumes(callbackWrapper.Options)) { // cleanup bookmark on resumption unless the user opts into multi-resume Remove(bookmark, callbackWrapper); } return(BookmarkResumptionResult.Success); }